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,这样第一步的准备工作就完成了。

下面 我们准备客户端代码

<html>

  <head>
    
    <title>论坛</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->                                            
    <script type="text/javascript" src="${ctx }/yogurtResource/assembly/comet/comet4j.js"></script>
    <script type="text/javascript">
    
        $(document).ready(function(){
            init();
        });
            function init(){  
                var forum_list = $("#forum_list");  
                 JS.Engine.start('../comet');  
            JS.Engine.on(
                    'hello',function(text){
                             forum_list.html(text);
                             var html = "<span id='forum_list8'></span>"
                             $("#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("错误!!");
            }
        
        });    
    }
    </script>
  </head>
  <body>
       这是论坛页面<br><br><br><br><br><br>
       <div>
               <form  id="addForum" action="">
                   <input type="text" name="channel" value="hello"/></form>
            <button id="forum" οnclick="addForum();">模拟论坛提交</button>
       </div>
       <div id="list">
               <span id="forum_list"></span><br>
               <span id="forum_list2"></span>
               <span id="forum_list3"></span>
       </div>
       
  </body>
</html>

下面我们准备服务端代码

@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 -->  
        <listener>  
            <description>Comet4J容器侦听</description>  
            <listener-class>org.comet4j.core.CometAppListener</listener-class>  
        </listener>  
        <servlet>  
            <description>Comet连接[默认:org.comet4j.core.CometServlet]</description>  
            <display-name>CometServlet</display-name>  
            <servlet-name>CometServlet</servlet-name>  
            <servlet-class>org.comet4j.core.CometServlet</servlet-class>  
        </servlet>  
        <servlet-mapping>  
            <servlet-name>CometServlet</servlet-name>  
            <url-pattern>/comet</url-pattern>  
        </servlet-mapping>  
      
        <listener>  
            <description>ChannelComet</description>  
            <listener-class>ChannelComet</listener-class>  
        </listener>  
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
          </welcome-file-list>

注意:

         1、此处不再赘述API中的各个类的具体作用及功能,请自己网络查找(天朝的网络上我是找不到API,就不附赠 了)其他的jar包,js已上传comet4j请下载

               2、这里面的配置是有顺序要求的,真正的项目中肯定不只是这么几个配置项,配置顺序不对会导致无法响应后台推送到前台的消息

               3、监听要换成咱么自己的监听类

               4、CometServlet的url-pattern配置和前台的start项中的要一致

        

更多编程内容,请扫码关注《coder练习生》,如果觉得有用,也可赠送作者一杯咖啡

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值