comet4j解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: comet4j解析

为什么会有这篇文章呢??

由于最近需要用到服务器推送技术,了解了一下这方面的知识,查找了好多例子,综合考虑使用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项中的要一致

目录
相关文章
|
1月前
|
XML 前端开发 JavaScript
webSocket 和 ajax 的区别
【10月更文挑战第26天】在实际开发中,需要根据具体的应用需求来选择合适的技术,以实现最佳的用户体验和系统性能。
|
JSON 缓存 前端开发
【JavaWeb】HTTP协议请求响应全解
【JavaWeb】HTTP协议请求响应全解
235 0
【JavaWeb】HTTP协议请求响应全解
|
XML JSON 前端开发
Web阶段:第二十章:Ajax请求
Web阶段:第二十章:Ajax请求
104 0
|
Web App开发 移动开发 JavaScript
|
JSON 前端开发 JavaScript
5种最流行的发送HTTP请求的方法
5种最流行的发送HTTP请求的方法
271 0
|
Web App开发 移动开发 前端开发
http的轮询和Websocket原理
天上星河转,人间帘幕垂。凉生枕簟泪痕滋。起解罗衣聊问、夜何其。 翠贴莲蓬小,金销藕叶稀。旧时天气旧时衣。只有情怀不似、旧家时。 一、HTTP的轮询 Web客户端与服务器之间基于Ajax(http)的常用通信方式,分为短连接与长轮询。
3316 0
|
JavaScript 数据格式 XML
|
Web App开发 前端开发 JavaScript
客户端与服务器持续同步解析(轮询,comet,WebSocket)
在B/S模型的Web应用中,客户端常常需要保持和服务器的持续更新。这种对及时性要求比较高的应用比如:股票价格的查询,实时的商品价格,自动更新的twitter timeline以及基于浏览器的聊天系统(如GTalk)等等。
1253 0
|
移动开发 JavaScript 前端开发