2013-03-20 114 views
7

想創建一個用戶可以進行協作的實時應用程序。發現node.js + socket.io是這類問題的解決方案之一。套接字的瓶頸?

我聽到其他開發人員說,就我的服務器給用戶的套接字數量而言,會有一個瓶頸。因此,如果我有數百個用戶在同一時間進行協作,則打開的套接字數量將耗盡,用戶將無法連接。這是一個有效的關注嗎?

更新:關於排序相關的筆記我正在尋找使用SockJS而不是Socket.io。這些庫有一個thread that explains pros and cons。還有this is a good read

+0

JS是不是最快的語言在那裏。如果您發現自己窒息JS,那麼尋找C++解決方案可以輕鬆地將您的吞吐量翻兩番。問題不在於你擁有多少個套接字,而是你是否設法及時處理它們。 – dtech 2013-03-21 00:00:02

+2

進程允許打開的文件描述符(包括套接字)的數量可以在所有(大多數?)UNIX類型的操作系統上配置,通常使用'ulimit'(在shell中)或'sysctl'(系統範圍內,仍然會同樣需要'ulimit')。 – robertklep 2013-03-21 09:10:07

回答

4

對於成百上千的用戶,我不認爲這是一個問題。

正如您所知的套接字在客戶端和服務器之間具有持續連接,並且雙方可以隨時開始發送數據。保持打開狀態不像處理每秒發送消息的負載那樣多。

Socket.io可以輕鬆處理1000個併發連接。但是如果它每秒發送超過8-10k條消息,它將會失敗。您的套接字耗盡之前,您將打開載荷屏障。在大多數情況下,處理更多併發用戶會轉化爲更高的負載。所以不要擔心套接字太低。試圖超越這個障礙將需要更多的服務器資源。

幫助鏈接:

  1. Socket.IO - are the open connections a concern?
  2. http://www.quora.com/How-do-I-scale-socket-io-servers-2