Comet方案的選擇


比較 Cometd pushlet Tomcat

幾種Comet

1)CometD
Bayeux(又稱CometD)

2)Jetty裏面含有實現comet技術的包(使用的是cometd-bayeux)

3)Tomcat的Comet(catalina)

4)pushlet --- 採用 htmlfile streaming 方式
還有一個pushlet,可惜性能不行(後面會談談pushlet的解決方案)
超過100個連接server和socket將出現緊張

5)dwr

是用CometD ,Pushlet 或者是tomcat 的catalina

主要是三種框架
1)pushlet/實現方式html streaming/java代碼
Pushlet 支持客戶端自己選擇使用流、拉(長輪詢)、輪詢方式
2)dwr
3)cometD/實現方式Long polling。它是使用了jetty continuations特性/java代碼/客戶端和服務端交互採用的Bayeux協議/有心跳機制
4)Nginx的nginx_http_push_module模塊/實現方式long- polling/c++代碼,用HTTP實現
5)catalina的Comet(Tomcat自帶)/java代碼

Cometd是一個Comet的框架,實現方式爲基於jetty continuation的長輪詢。 Cometd的消息都基於一個叫做Bayeux的消息協議(以 JSON 格式)


Bayeux 協議-- Bayeux 1.0草案1(使用JSON格式)
http://www.blogjava.net/menlong999/archive/2009/08/16/291365.html --- 學習Bayeux消息協議
http://svn.cometd.com/trunk/bayeux/bayeux.html


http://www.360doc.com/content/11/1117/01/8133713_165070990.shtml
http://www.360doc.com/content/11/1117/01/8133713_165070990.shtml


CometD主頁  ---- 有代碼例子
http://cometdproject.dojotoolkit.org/documentation/cometd-java


CometD可以跨客戶端平臺,但要自己去實現Bayeux消息協議(JSON格式)


基於 Iframe 及 htmlfile 的流(streaming)方式

四種方式實現推送功能:
1)輪詢,基於HTTP
2)long-polling 長輪詢,基於HTTP
3)htmlfile streaming 長連接,基於HTTP
4)socket,基於TCP


答:=================================  
如果要跨平臺,如:android/iphone/wp7,則採用nginx-push-stream-module模塊,如果只在android手機上使用,則採用CometD或者nginx-push-stream-module模塊

Nginx官方今天發佈了最新的1.3.13開發版本,添加了對於WebSocket協議的支持


下載
http://nginx.org/en/download.html
http://nginx.com/news/nginx-websockets.html
Nginx官方今天發佈了最新的1.3.13開發版本,添加了對於WebSocket協議的支持

兩種
nginx_http_push_module
nginx-push-stream-module


手機操作系統排行
1.android(java)
2.iphone(objective-c)
3.wp7(c#)


nginx-push-stream-module. 看名字和之前的nginx-http-push-module十分附近, 是無意中在github裏發明的. ?基於slack版的二次開闢. 根蒂根基完美解決了內存分派機制的題目, 且參加了HTML5 Web Sockets的支撐.


牛人寫的一個插件,說是可以通過這個實現nginx的comet支持,類似於  hookbox的過濾指定url消息轉發吧。不過看起來可以自定義的東西不是很多。而寫我看着接口好像不大優雅。
Nginx Push Stream Module
         https://github.com/wandenberg/nginx-push-stream-module
         http://pushmodule.slact.net/


==================================================================================

=============jpush原理 --- 大容量雲推送技術解析
http://www.docin.com/p-557938781.html


=======nginx的http session管理
http session,基本上可以認爲就是我們平常所理解的完成GET或者POST請求的HTTP應用的TCP Session。

nginx的特色功能有:

(1).URL rewrite:URL重寫

(2).reverse proxy:反向代理

(3). 做緩存服務器

(4). 實現對web服務的負載均衡

=====================


第三方:
Google App Engine Channel API嚐鮮


android + cometd的消息推送模式

http://www.oschina.net/question/580405_59137

使用jetty7部署的cometd2.41作爲android的消息推送服務端

參考了一下網上的資料,客戶端採用jetty的httpClient 的HttpClient.CONNECTOR_SOCKET方式連接,但是隻能維持1-2分鐘左右,然後就斷開連接

後來自己試了一下HttpClient.CONNECTOR_SELECT_CHANNEL方式,可以長鏈

但是問題來了,不知道是不是方式選擇的問題,每隔30秒,也就是jetty默認設置的maxIdleTime,就會跑流量,運行時間一長就有點嚇人

請假一下問題出在哪裏,有沒有好的解決方法??


實現Comet的兩種方式
1)長輪詢long-polling
先請求一個連接,有數據則響應,沒有數據則等待,當有數據時,響應給客戶端,這時,又立即發送另一個請求。一直這樣。
2)htmlfile streaming 一直保留連接


c/c++實現的ngiux_http_


CRCP協議


Comet Framework


關於國內的第三方平臺,我感覺目前比較不錯的就是  ------------  極光推送

CometD使用jetty continuations特性
http://sinooyj.iteye.com/blog/1133647
有一個Comet的框架叫做Cometd,使用的方式爲Long polling。它是使用了jetty continuations特性,jetty continuations使得異步的request成爲可能,這裏我們來討論下爲何需要jetty continuations呢?



其實android也可以使用jetty的comet客戶端
jetty提供了一整套comet方案,cometd2.0也是建立在jetty的httpclient基礎上的。雖然nio是android不支持的,但是仍然可以使用socket來完成comet client.



實則android也可以使用jetty的comet客戶端



比較好的android方案(Tomcat+Jetty[CometD] --- android+Jetty[CometD])
實則android也可以使用jetty的comet客戶端
http://www.myexception.cn/android/642867.html

nginx
Nginx官方今天發佈了最新的1.3.13開發版本,添加了對於WebSocket協議的支持

Turn Nginx into an adept HTTP Push server..

ngx_http_push_stream_init_module

參考文章:http://wiki.nginx.org/HttpPushStreamModule


NGiNX_HTTP_Push_Module 是一個 Nginx 的擴展模塊,它實現了 HTTP Push 和Comet server的功能。
Nginx的nginx_http_push_module模塊,可以使nginx服務器成爲一個comet服務器


消息推送(Server Push)
http://blog.csdn.net/feiyu84/article/details/8150884



jetty提供了一整套comet方案,cometd2.0也是建立在jetty的httpclient基礎上的。雖然nio是android不支持的,但是仍然可以使用socket來完成comet client.



============Tomcat session 超時設置  == 30分鐘


=========== long-polling的原理
淺談基於HTTP的長連接原理及應用
http://lunwen.1kejian.com/jisuanjiwangluo/67763.html




    輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後馬上返回響應信息並關閉連接。
    優點:後端程序編寫比較容易。
    缺點:請求中有大半是無用,浪費帶寬和服務器資源。
    實例:適於小型應用。


    長輪詢:客戶端向服務器發送Ajax請求,服務器接到請求後hold住連接,直到有新消息才返回響應信息並關閉連接,客戶端處理完響應信息後再向服務器發送新的請求。
    優點:在無消息的情況下不會頻繁的請求。
    缺點:服務器hold連接會消耗資源。
    實例:WebQQ、Hi網頁版、Facebook IM。

另外,對於長連接和socket連接也有區分:

    長連接:在頁面裏嵌入一個隱蔵iframe,將這個隱蔵iframe的src屬性設爲對一個長連接的請求,服務器端就能源源不斷地往客戶端輸入數據。
    優點:消息即時到達,不發無用請求。
    缺點:服務器維護一個長連接會增加開銷。
    實例:Gmail聊天


    Flash Socket:在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript通過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通信,JavaScript在收到服務器端傳送的信息後控制頁面的顯示。
    優點:實現真正的即時通信,而不是僞即時。
    缺點:客戶端必須安裝Flash插件;非HTTP協議,無法自動穿越防火牆。
    實例:網絡互動遊戲。


===========
總論:有兩種選擇:
1)SOCKET實現
2)選擇cometD框架,因爲採用了jetty continuations,還有Bayeux消息協議
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章