2015-08-14 56 views
-2

我正在創建基本上具有多個連接到第三方聊天流API(基於套接字)的應用程序。Python或節點中的異步套接字連接

它的工作方式是 - 每個用戶在我的應用程序上有一個帳戶,在第三方應用程序上有另一個帳戶。他爲我提供了第三方聊天應用程序的訪問令牌,並且我連接到第三方API以流式聊天。這發生在數百名用戶身上。

我需要爲每個用戶創建一個套接字連接池並運行並行線程。我正在使用Python庫(針對該API),並能夠爲單個用戶實現實時Feed。如何在Python或NodeJS中實現異步套接字連接池?我在EC2上有一個Linux微型實例,我需要爲1000個用戶運行這個應用程序。

我在探索Redis + Tornado來實現這一點。有沒有更好的選擇?

+0

所以基本上你的應用程序應作爲客戶和第三方API之間的透明代理? – robertklep

+0

@robertklep排序。它代表客戶端連接到第三方流媒體API,並過濾一些數據並將其存儲在我的數據庫中。 – zenCoder

+0

Jquery(客戶端)不允許'Socket based'!所有的python MVC都是基於wsgi的。所以分配不是一個好主意。我的觀點:共享用戶在一個組中,將用戶端口劃分到位置,'DB == io',因此您需要很多內存以用於延時錄製,從不使用服務器端數據進行比較,使用'result'。 – dsgdfg

回答

0

這將是混亂,也是一些事情要考慮。

  1. 如果您打算使用多線程,請記住您每個CPU只能運行如操作系統允許的那麼多,而不是multiprocessing
  2. 如果您要使用長輪詢過程進行異步,它將阻止其他客戶端處理請求。

解決方案

當你的應用程序絕對必須是實時的,我建議爲服務器 - 客戶端交互的WebSockets。

然後從您的客戶端請求啓動一個進程,該進程在python中使用multiprocessing在您的流API上偵聽\ polls。所以你將基本上爲每個客戶創建一個單獨的過程。

現在,爲了讓您的WebSocketHandler和Background API Streamer相互交互,您可以使用觀察者模式(https://en.wikipedia.org/wiki/Observer_pattern)通知WebSocket您已從API接收數據。

請確保您爲每個客戶端分配一個唯一的ID,並確保您只在使用websockets時將數據發佈到預期的客戶端。

編輯:

網站:

也在你的關於龍捲風的問題。這對於運行幾個用戶來說可能是一個很好的輕量級框架,也許是1000.但是,除了我會建議考慮Django,因爲它可以使您在生成代碼方面更加高效,而且還有很多工具可用於社區隨着時間的推移發展。

數據庫:

Red.is是一個不錯的選擇,如果你需要一個非常快的沒有SQL數據庫,也看看MongoDB的。如果你需要一個多區域的數據庫,我建議由於分區節點而使用Cassandra或CouchDB。下面的圖片可能會幫助您更好地決定使用哪個數據庫。

enter image description here