comet4j解析

简介: 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项中的要一致

目录
相关文章
|
9月前
|
前端开发 JavaScript 安全
【前端开发】HTTP 请求入门指南:最常见的七种请求方法。
在现代的前端开发中,与服务器进行数据交互是至关重要的任务。为了简化请求和处理数据的过程,开发人员使用各种前端请求库来进行网络请求。本文将介绍并比较几种常见的前端请求库,包括Fetch、Axios、Ajax、XHR、jQuery AJAX、SuperAgent和Vue-resource。通过了解它们的特点、使用方法和适用场景,您将能够更好地选择合适的请求库,并优化您的前端开发过程。
|
JSON 前端开发 数据格式
地图集web项目_技术学习(一)_前后端数据传输(ajax)
地图集web项目_技术学习(一)_前后端数据传输(ajax)
116 0
|
JSON 前端开发 JavaScript
跨域问题的解决方案 jsonp cros原理
当浏览器端运行了一段ajax代码(无论是使用XMLHttpRequest还是fetch api),浏览器会首先判断它属于哪一种请求模式
跨域问题的解决方案 jsonp cros原理
|
JSON 前端开发 JavaScript
Ajax请求服务端的五种方式
Ajax请求服务端的五种方式
|
JSON 前端开发 JavaScript
5种最流行的发送HTTP请求的方法
5种最流行的发送HTTP请求的方法
240 0
|
JSON 前端开发 API
前端 ajax 请求的优雅方案
前端 ajax 请求的优雅方案
89 0
|
Web App开发 移动开发 JavaScript
|
Web App开发 JSON JavaScript
用Dojo实现Ajax请求:XH“.NET研究”R、跨域、及其他
  在任何浏览器上方便地实现Ajax请求是每一个Ajax框架的初衷。Dojo在这方面无疑提供了非常丰富的支持。除了XMLHttpRequest之外,动态script、iframe、RPC也应有尽有,并且接口统一,使用方便,大多数情况下都只需要一句话就能达到目的,从而免除重复造轮子的麻烦。
1204 0
|
Web App开发 前端开发 JavaScript
客户端与服务器持续同步解析(轮询,comet,WebSocket)
在B/S模型的Web应用中,客户端常常需要保持和服务器的持续更新。这种对及时性要求比较高的应用比如:股票价格的查询,实时的商品价格,自动更新的twitter timeline以及基于浏览器的聊天系统(如GTalk)等等。
1224 0
|
移动开发 JavaScript 前端开发