<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.json-2.2.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.cometd.js"></script>
</head>
<body>
<input type="button" value="hehe" onclick="test()" />
</body>
<script type="text/javascript">
$(function(){
$.comet.init("${pageContext.request.contextPath}/cometd/cometd");
$.comet.subscribe("/test/task", callback);
});
function callback(msg){
alert("eheh进来了");
if(msg&&msg.data&& msg.data.test){
alert(msg.data.test);
}
}
function test(){
alert(new Date().getTime());
$.ajax({
url:"${pageContext.request.contextPath}/CometServlet?time"+new Date().getTime()
});
}
</script>
</html>
$.comet.init("${pageContext.request.contextPath}/cometd/cometd"); //初始化
$.comet.subscribe("/test/task", callback);//订阅名为"/test/task"的主题
这个/test/task与java代码中的
public class DataPushUtil { public static void publish(HttpServletRequest request,String channelName,String context){ if(null!=request){ Bayeux b = (Bayeux)(request.getSession().getServletContext().getAttribute(Bayeux.DOJOX_COMETD_BAYEUX)); Channel c = b.getChannel(channelName, false); if(null!=c){ Map<String, Object> message = new HashMap<String, Object>(); message.put("test", "jsp: hello world"); c.publish(b.newClient("server_user", null), message, "new server message"); } } } public static void publishTask(HttpServletRequest request,String context){ if(null!=request){ Bayeux b = (Bayeux)(request.getSession().getServletContext().getAttribute(Bayeux.DOJOX_COMETD_BAYEUX)); Channel c = b.getChannel("/test/task", false); if(null!=c){ Map<String, Object> message = new HashMap<String, Object>(); message.put("test", context); c.publish(b.newClient("server_user", null), message, "new server message"); } } } }
Channel c = b.getChannel("/test/task", false); 当后台调用publishTask方法时,就会调用页面的callback方法
相关推荐
CometD是一个开源的WebSocket和AJAX双向通信框架,它实现了Bayeux协议,允许服务器主动向客户端推送数据,实现低延迟的实时通信。Spring框架则为这个项目提供了强大的依赖注入和面向切面编程能力,使得服务端组件的...
CometD是一个基于Bayeux协议的开源 comet(也称为长轮询)框架,它提供了一个高效的、可扩展的、跨平台的实时通信解决方案。在Web开发中,实时通信是实现如聊天、股票更新、协作编辑等应用的关键技术。CometD支持...
它提供了服务器推送技术,使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。CometD的核心理念是通过长连接来实现双向通信,极大地提高了Web应用的交互性和实时性。 在"cometd-3.0.0.beta2-...
用户发送的消息可以通过CometD服务直接推送到其他在线用户,无需客户端不断地轮询服务器获取新消息。这大大提高了用户体验,降低了服务器负载。 2. **注册功能**:注册通常涉及用户身份验证和授权。在CometD中,...