2010-11-02 190 views
2

我在WebSockets中摸索了一下,並且非常高興得到一個運行Tornado服務器的基本websocket連接是多麼容易。我從未在今天之前使用過Tornado,雖然我喜歡我所看到的,但有幾個問題與我的使用有關。WebSocket交叉連接通信(Tornado?)

首先,我使用WebSockets,以便在兩臺或更多客戶端計算機之間進行低開銷通信。 (爲了談話的目的,我們只是說它是一個聊天客戶端)顯然,我可以從多臺機器連接到服務器,並且它們都可以將消息推送到服務器,服務器可以響應,這非常棒!但這並不比標準的AJAX請求好得多。如果我有一個持久連接,我希望能夠將數據推送到客戶端。最簡單的情況是用戶1向服務器發佈消息,服務器在收到消息後立即將其推送給用戶2.

那麼,什麼是一種很好的方法來實現它?就我所知,在Tornado中,除了將消息放置在某個數據存儲區並讓所有其他連接輪詢新信息之外,無法在連接之間進行通信。儘管如此,這讓我感到非常笨拙,因爲當時你真的在做的是將輪詢過程從客戶端移動到服務器。

當然,我可能會在這裏完全吠叫錯誤的樹。 Tornado根本就不是這份工作的正確工具,而且如果是這種情況,我很樂意聽取替代方案的建議!

回答

3

這裏是一個聊天服務器使用龍捲風的WebSockets和Redis的:https://gist.github.com/pelletier/532067更新:鏈接固定,感謝@SamidhT)

+0

太棒了!這正是我所尋找的那種類型。看起來有點顯而易見,現在我看代碼,但後見之明總是20/20,呃?另外,感謝無意中將我指向Redis,這實際上是我要去尋找的下一個東西! (基於非易失性內存的數據存儲) – Toji 2010-11-02 18:20:24

+0

舊鏈接已死亡。這是新的https://gist.github.com/pelletier/532067 – 2014-01-11 18:59:28

+0

@SamidhT謝謝,我更新了內聯鏈接。 – kanaka 2014-01-11 21:54:59

0

雖然答案已經被接受:使用不同的服務似乎仍然非常低效的我。你爲什麼不去共享內存+條件變量/信號量?你聽起來像你有一個標準的消費者生產者問題