2015-02-23 61 views
5

我有一個燒瓶webapp運行熊貓在後端做一些數據分析。flask-socketio每個用戶一個房間?昂貴?

現在,我採取了使用AJAX的樸素方法,用戶可以將查詢發送回服務器並與數據交互。但事實證明,每次請求都有很多開銷,每次我都需要將數據重新加載到非常重複的熊貓/內存中。

我在想socketio在這裏可以很好用 - 我打開一個套接字連接,這樣一旦文件被加載到熊貓中,用戶可以通過套接字以更少的開銷響應地交互和查詢數據。

所以我的問題現在的問題是:

  • 我應該開闢爲每個用戶一個房間作爲用戶不需要彼此互動?
  • 這個比例 - 是否爲每個用戶開放一個房間?
  • 命名空間在哪裏適合在這裏?我是否將名稱空間分配給網站的不同部分,併爲每個用戶進一步打開每個名稱空間下的空間?
  • 或者我應該產卵猴子修補線程? Greenlet每個用戶?
+0

假設1個用戶= 1個websocket連接,並且實際上使用的是socket.io,則每次新用戶連接時都不需要手動實例化新房間; socket.io自動爲每個連接創建獨特的空間。 – theaccordance 2015-02-26 22:49:53

回答

8

爲每個用戶打開一個房間是一個有效的解決方案,我通常推薦它作爲一種輕鬆地在服務器推送的消息中解決個人用戶問題的方法。

房間是在內存中的Python數據結構中保存的,所以它們只是使用一點點內存纔是昂貴的。我沒有測量每個用戶的數量,但它可能只是房間名稱上的幾個字節。

命名空間用於將多個不同的連接複用到一個物理通道中。如果您只有一個連接,那麼只需使用相同的命名空間即可。例如,如果您的頁面中有兩個客戶端應用程序(例如角度應用程序),並且每個應用程序都有自己的一組事件處理程序,則應該使用多個名稱空間。除此之外,沒有理由使用多個名稱空間。

希望這會有所幫助。

+0

完美。謝謝米格爾。你的書的大粉絲,博客帖子... – 2015-02-24 15:35:10