?
?第一次參見公司的職稱評定,評委問了一個問題,是我做權限管理那塊的,說admin 管理員修改了一個用戶的權限,讓這個正在使用中的用戶不能再 查看系統日志了 ,如何立刻反映到這個用戶上。
?
??? 我說 可以使用一個線程根據用戶ID去請求后臺,吧最新的權限信息同步到前臺,這也是一個笨辦法,能解決問題,可以不巧妙,如果我當時對推模式有所研究 一定會回答好這個問題。
?
?
??????? 推模式的 好處是由后臺主動把信息退送到客戶端 (比如瀏覽器),引起客戶端 (比如HTML DOM結構變化)的變化,使用推模式就能很好的解決 我答辯時的問題,我那種掃描輪詢的方式 會加大服務的壓力
?
?
?首先了解下什么是 推模式,以及一個 推模式的開源實現 (DWR)
?
以下是來自網上:
?
ajax 推模式
http://www.iteye.com/topic/155609
?
一個例子 聊天室
http://www.iteye.com/topic/199079
?
DWR 長連接方式的若干問題?
http://www.blogjava.net/josson/archive/2008/03/31/189810.html
DWR推技術在開發中需要注意的ScriptSession問題?
http://www.blogjava.net/zhyiwww/archive/2009/02/24/236318.html
深入理解基于 HTTP 長連接的“服務器推”技術(Comet)
http://bbs.phpchina.com/viewthread.php?tid=100836
http://hi.baidu.com/renyangok/blog/item/f4bb66803fbdadd2bc3e1ea3.html
?
?dwr推
http://chenjumin.iteye.com/blog/690071
?
?
下面是 來自晚上的一個 聊天室的 推模式(使用DWR)的例子 我做了簡單的修改
?
1. 聊天室用戶信息?使用單例模式 放在一個Vector中?,以前是網上的例子是放在list中的,這樣做事為了解覺并發問題,應為 Vector 是同步的
?
2.小米同學做個一個簡單的界面
?
3.對方法在session 中的用戶 User 實現了 HttpSessionBindingListener 接口 用戶推出 或者session 超時時候引起
?
聊天室人數變化 會直接推送到 前臺頁面
?
?
基本的原理是 使用http/1.1的長連接 監聽某個頁面,然后將服務器上的數據推送到 監聽的頁面,由于是服務器端主動推送數據的 所以高效 省時,節約資源
?
?
另外:
?
?web服務器 所能處理的鏈接數 是有限的,每個用戶都開一個長鏈接 而不釋放,當連接數達到峰值時候會 阻塞后面的鏈接,因此需要 連接池技術 或者 叫鏈接 復用 ,好在這個問題 已經有解決方案了,我自己還沒實現,最近加班忙的很 等閑了 我在給以前的 chat 加上 連接池!
?
面向 Java 開發人員的 Ajax:? 使用 Jetty 和 Direct Web Remoting 編寫可擴展的 Comet 應用程序
http://www.ibm.com/developerworks/cn/java/j-jettydwr/
?
注:
?
1.附件中是聊天室 的 源碼 導入 eclipse 可直接修改!
2.將聊天室發布在tomcat中,驗證推模式
?? a.首先建立? chat.xml 在 tomcat的? D:\apache-tomcat-6.0.18\conf\Catalina\localhost 下 ,內容如下(根據自己的tomcat安裝目錄做相應的修改) :
?
- < Context ? path = "/chat" ? docBase = "D:\workspace2\chat\WebRoot" ?? debug = "0" ? reloadable = "true" > </ Context > ??
- ??????????????????????????????????????????????????????????????????????????????????????
?
3.啟動tomcat .訪問 http://localhost:8080/chat 可以看到 聊天室的頁面
? 為了便于測試 我們需要開 兩個 瀏覽器? 分別 注冊 聊天室 成員 然后 互相聊天 ,看看推模式是如何在兩個頁面上傳送數據的
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
