2011-07-21 50 views
2

我期待着爲我的Web應用程序使用Websocket開發一個實時API。爲此,我使用RabbitMQ作爲代理,我的後端基於python(gevent + websocket),Pika/Puka作爲rabbitmq客戶端。RabbitMQ與Websocket和Gevent

我在這裏面臨的問題是,我們如何使用websocket連接rabbitMQ。在初始websocket連接建立之後,socket對象等待來自客戶端的新消息,並且在rabbitMQ的情況下,我們需要爲它設置一個消費者,因此它會在收到消息時處理消息。我們可以採用這種方式,

  1. 客戶端通過全雙工websocket與服務器建立連接。
  2. 所有的客戶端在首次websocket握手後都應該充當RabbitMQ的使用者,所以當客戶端收到消息時它們都會得到更新。
  3. 當新消息到達websocket時,該客戶端會將其發送到RabbitMQ,因此此時此客戶端充當發佈者。

問題是Websocket等待一條新消息,並且RabbitMQ消費者在其信道上等待新消息,我未能鏈接這兩種情況。

我不知道這是否是一個錯誤的方法......

我無法找到一個方法來實現這個scenario.If我會走錯路或有任何替代方法?,請幫我解決這個問題。

謝謝

Haridas N.

回答

1

我實現了與旋風+的WebSocket +的RabbitMQ +鼠兔類似的要求。

我認爲這是已知的方法。這是我的這個網絡聊天應用程序的git回購。

https://github.com/haridas/RabbitChat

這似乎與GEVENT /扭曲,因爲RabbitMQ的客戶端可以不支持GEVENT /扭曲的事件循環的類似的事情非常困難。

該pika有龍捲風適配器,所以這使得這易於設置。派卡開發團隊也在扭曲適配器上工作。我希望他們能很快發佈它。

感謝,

Haridas N.

http://haridas.in

+0

您是否爲每個用戶創建新的rabbitmq連接? – Mike

0

一個簡單的解決方案是使用gevent.queue.Queue實例進行greenlet間通信。

+0

是的,這是可能的和很多的例子可用。但在我的情況下,我需要RabbitMQ集成。任何方式,我發現一些ZeroMQ和Gevent的良好整合。所以我會看看它。 –