2013-06-24 69 views
1

我正在開發使用python Twisted框架的羣組聊天。我使用的技術是使用Ajax進行長輪詢。我正在返回SERVER_NOT_DONE_YET以保持連接處於打開狀態。該代碼是非阻塞的並允許其他請求。它有多大的可擴展性?使用Twisted框架實現服務器推送

但是,我想通過打開的連接前進此流。我想實現純服務器推送。怎麼做 ?我需要走向XMPP的方向嗎?如果我在服務器上爲每個唯一客戶端打開一個套接字,哪個Web服務器最適合橋接?它有多大的可擴展性?

我希望它與C10K問題一樣具有可擴展性。我想堅持Twisted,因爲它具有很多簡單步驟的協議實現。請指向正確的方向。 Thanx

+0

當你問「它有多大的可擴展性」時,你期望得到的答案是什麼形式? – Glyph

回答

1

長投票的作品,但不一定是你最好的選擇。它與防火牆和片狀互聯網連接的整合開始變得非常糟糕。例如,在工作中,我們的許多客戶的防火牆會中斷任何10-20秒內未激活的HTTP連接。

我們通過SSL切換到WebSocket解決了很多問題。 WebSocket爲您提供了一個全雙工通道,非常適合服務器推送。通過使用SSL,防火牆在垃圾收集方面往往不太積極,並且transparent proxies are often fooled by the TLS encryption。即使您使用的是WebSockets而不是長輪詢,您仍然需要管理應用程序級別的偶爾斷開連接,但即使採用體面的恢復協議,也可以適當地處理這些問題,而不管您使用的是何種傳輸協議。

這就是說,而不是直接進入WebSockets,我們決定使用SockJS。這種選擇的主要原因是SockJS可以使用WebSocket(rfc6455,hixie-76,hybi-10),但如果客戶端的瀏覽器不支持它,它也可以回退到xhr-streaming,xdr-streaming,etc或者如果連接失敗)。當我說它可以「倒退」時,我的意思是你在客戶端使用的代碼保持完全一樣,SockJS負責骯髒的工作。

在服務器端,情況也是如此。我們目前使用CycloneSockJS implementation Twisted(正在生產),但我們也知道DesertBus'的實施,我們仍然必須檢查。還有其他一些我們希望查看的內容,例如WAMP以及附帶的Autobahn|Python

關於性能,我們使用HAProxy進行SSL終止和負載均衡。 HAProxy的performance is pretty amazing,在許多層面上。

0

我們現在已經遷移到WebSockets。它工作得很好!