精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
comet4j java服務端推送消息到web頁面實例

      對于頁面一直監控,以前都是使用ajax請求即可,但是小并發這做法沒多大問題,但是到了大并發就不太合適,如果不想自己寫線程來操控就可以偷懶找一些插件,例如comet4j

下面我來演示下如何使用這個插件

      先準備需要的工具:

comet4j-tomcat6.jar(tomcat6的就導入這個)

comet4j-tomcat7.jar(tomcat7的就導入這個)

comet4j.js(頁面引入這個js)

具體操作看下面


然后就寫個class

  1. package com.shadow.extras.comet4j;  
  2.   
  3. import javax.servlet.ServletContextEvent;  
  4. import javax.servlet.ServletContextListener;  
  5.   
  6. import org.comet4j.core.CometContext;  
  7. import org.comet4j.core.CometEngine;  
  8.   
  9. public class TestComet implements ServletContextListener {  
  10.     private static final String CHANNEL = "test";  
  11.     private static final String CHANNEL2 = "test2";  
  12.   
  13.     public void contextInitialized(ServletContextEvent arg0) {  
  14.         CometContext cc = CometContext.getInstance();  
  15.         cc.registChannel(CHANNEL);// 注冊應用的channel  
  16.         cc.registChannel(CHANNEL2);  
  17.   
  18.         Thread helloAppModule = new Thread(new HelloAppModule(),  
  19.                 "Sender App Module");  
  20.         // 是否啟動  
  21.         helloAppModule.setDaemon(true);  
  22.         // 啟動線程  
  23.         helloAppModule.start();  
  24.   
  25.         Thread helloAppModule2 = new Thread(new HelloAppModule2(),  
  26.                 "Sender App Module");  
  27.         // 是否啟動  
  28.         helloAppModule2.setDaemon(true);  
  29.         // 啟動線程  
  30.         helloAppModule2.start();  
  31.     }  
  32.   
  33.     class HelloAppModule2 implements Runnable {  
  34.         public void run() {  
  35.             while (true) {  
  36.                 try {  
  37.                     // 睡眠時間  
  38.                     Thread.sleep(5000);  
  39.                 } catch (Exception ex) {  
  40.                     ex.printStackTrace();  
  41.                 }  
  42.                 CometEngine engine = CometContext.getInstance().getEngine();  
  43.                 // 獲取消息內容  
  44.                 long l = getFreeMemory();  
  45.                 // 開始發送  
  46.                 engine.sendToAll(CHANNEL2, l);  
  47.             }  
  48.         }  
  49.     }  
  50.   
  51.     class HelloAppModule implements Runnable {  
  52.         public void run() {  
  53.             while (true) {  
  54.                 try {  
  55.                     // 睡眠時間  
  56.                     Thread.sleep(2000);  
  57.                 } catch (Exception ex) {  
  58.                     ex.printStackTrace();  
  59.                 }  
  60.                 CometEngine engine = CometContext.getInstance().getEngine();  
  61.                 // 獲取消息內容  
  62.                 long l = getFreeMemory();  
  63.                 // 開始發送  
  64.                 engine.sendToAll(CHANNEL, l);  
  65.             }  
  66.         }  
  67.     }  
  68.   
  69.     public void contextDestroyed(ServletContextEvent arg0) {  
  70.   
  71.     }  
  72.   
  73.     public long getFreeMemory() {  
  74.         return Runtime.getRuntime().freeMemory() / 1024;  
  75.     }  
  76. }  

然后再寫個頁面


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>Comet4J Hello World</title>  
  6. <script type="text/javascript" src="plugin/comet4j/comet4j.js"></script>  
  7. <script type="text/javascript">  
  8. function init(){  
  9.         var kbDom = document.getElementById('kb');  
  10.         var kbDom2 = document.getElementById('kb2');  
  11.         JS.Engine.on({  
  12.                 test : function(aa){//偵聽一個channel  
  13.                         kbDom.innerHTML = aa;  
  14.                 },  
  15.                 test2 : function(bb){  
  16.                     kbDom2.innerHTML = bb;  
  17.                 }  
  18.         });  
  19.         JS.Engine.start('comet');  
  20. }  
  21. </script>  
  22. </head>  
  23. <body onload="init()">  
  24.         剩余內存:<span id="kb">...</span>KB <br/>  
  25.         剩余內存:<span id="kb2">...</span>KB  
  26. </body>  
  27. </html>  

接著配置下web.xml就ok了

  1. <!-- comet4j -->  
  2.     <listener>  
  3.         <description>Comet4J容器偵聽</description>  
  4.         <listener-class>org.comet4j.core.CometAppListener</listener-class>  
  5.     </listener>  
  6.     <servlet>  
  7.         <description>Comet連接[默認:org.comet4j.core.CometServlet]</description>  
  8.         <display-name>CometServlet</display-name>  
  9.         <servlet-name>CometServlet</servlet-name>  
  10.         <servlet-class>org.comet4j.core.CometServlet</servlet-class>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.         <servlet-name>CometServlet</servlet-name>  
  14.         <url-pattern>/comet</url-pattern>  
  15.     </servlet-mapping>  
  16.   
  17.     <listener>  
  18.         <description>TestComet</description>  
  19.         <listener-class>com.shadow.extras.comet4j.TestComet</listener-class>  
  20.     </listener>  

最后修改下tomcat的server.xml文件

把protocol參數值改成下面的,因為這是基于nio開發的插件

  1. <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>  

測試,很簡單就是訪問我們剛剛創建的test.html,然后就可以看到內存數值一直自動刷新波動


本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
jQuery基礎
jquery+json 實例 (當jquery遇上了json )
了解 Apache Click
Web前端筆試115道題(帶答案及解析)
HTML、SHTML、XHTML、DHTML、XML、JavaScript、JS、HTML DOM、CSS有什么區別
說說JSON和JSONP,也許你會豁然開朗
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 无锡市| 疏附县| 长泰县| 新干县| 洛隆县| 苏尼特右旗| 桐庐县| 阳东县| 双峰县| 邵阳市| 麻栗坡县| 当雄县| 顺义区| 鹰潭市| 湘潭市| 华亭县| 开江县| 尤溪县| 濮阳县| 朝阳市| 互助| 莱西市| 吴堡县| 兰考县| 金坛市| 五家渠市| 松桃| 濮阳县| 云南省| 靖江市| 理塘县| 涿鹿县| 湖南省| 双柏县| 盖州市| 濮阳市| 民县| 百色市| 西乌珠穆沁旗| 延庆县| 武川县|