为什么会有这篇文章呢??
由于最近需要用到服务器推送技术,了解了一下这方面的知识,查找了好多例子,综合考虑使用Comet4j,不过目前这款插件只支持tomcat(按照tomcat的版本需要下载对应的jar包)。
准备工作
1.下载自己对应的版本的jar tomcat6 -----comet4j-tomcat6.jar tomcat7------comet4j-tomcat7.jar
2.下载comet4j.js
3、由于comet4j基于NIO实现,所以需要修改tomcat的server.xml中的配置见下图
将原先的HTTP/1.1改为org.apache.coyote.http11.Http11NioProtocol以支持NIO,这样第一步的准备工作就完成了。
下面 我们准备客户端代码
论坛
("#forum_list");
JS.Engine.start('../comet');
JS.Engine.on(
'hello',function(text){
forum_list.html(text);
var html = ""
("#list").html(html);
("#forum_list8").html("我是测是者a");
});
JS.Engine.on('start',function(cId, channelList, engine){
$("#forum_list3").html(cId);
});
}
function addForum(){
.ajax({
url:'{ctx }/forum/add_forum',
data:{
'hello':'hello'},
type:"post",
dataType:"json",
success:function(data){
// alert("异步成功");
},error:function(){
alert("错误!!");
}
});
}
这是论坛页面
模拟论坛提交
下面我们准备服务端代码
@Controller("forumController")
@RequestMapping("/forum")
public class ForumController extends BaseController{
@RequestMapping(value = "/forum_list")
public ModelAndView forumList(){
return new ModelAndView("forum/forum_list");
}
@RequestMapping(value="/add_forum")
@ResponseBody
public Object addForum(){
String abc="我是向前台推送的消息";
User user=new User();
user.setUsername("伟大的天朝");
// 创建CometEngine实体类
CometEngine engine = CometContext.getInstance().getEngine();
engine.sendToAll("hello", user.getUsername());
return user;
}
}
还需要一个监听来创建信道
public class ChannelComet implements ServletContextListener{
private static final String CHANNEL = "hello";
public void contextInitialized(ServletContextEvent arg0) {
// CometContext是一个单例静态
System.out.println("-----------------------------------------------------------------------------------------");
CometContext cc = CometContext.getInstance();
cc.registChannel(CHANNEL);// 注册应用的channel
System.out.println("注册信道成功");
}
public void contextDestroyed(ServletContextEvent arg0) {
}
}
最后来完成我们的配置工作
Comet4J容器侦听
org.comet4j.core.CometAppListener
Comet连接[默认:org.comet4j.core.CometServlet]
CometServlet
CometServlet
org.comet4j.core.CometServlet
CometServlet
/comet
ChannelComet
ChannelComet
index.jsp
注意:
1、此处不再赘述API中的各个类的具体作用及功能,请自己网络查找(天朝的网络上我是找不到API,就不附赠 了)其他的jar包,js已上传comet4j请下载
2、这里面的配置是有顺序要求的,真正的项目中肯定不只是这么几个配置项,配置顺序不对会导致无法响应后台推送到前台的消息
3、监听要换成咱么自己的监听类
4、CometServlet的url-pattern配置和前台的start项中的要一致