2016-04-08 47 views
3

我正在使用socket.io構建應用程序socket.io可以處理的最大房間數是多少?

我使用的是socket.io的房間功能,有5個「主題」用戶可以訂閱。每個在該主題中廣播的消息都有一個消息類型,其中有100個。用戶只會收到它們允許接收的消息類型,可能在30到70之間。

我的問題:是嗎?可行性爲每個主題+消息類型組合創建一個空間,這將是5 x 100個房間?請問socket.io的性能如何,還是有更好的方法來解決這個問題?將單個消息發送到每個單獨的套接字而不是使用房間會更好嗎?

感謝您的幫助。

+0

@Baronz - 這個問題並不完全一樣。這個問題是關於您可以在服務器上維護多少個房間,而不是關於您連接了多少個套接字。 – jfriend00

回答

8

socket.io房間是一個輕量級的數據結構。它們只是與該房間相關的一組連接。您可以擁有任意數量的內存(在正常內存使用限制內)。沒有重量級的東西讓資源方面的房間變得昂貴。這只是希望與該房間關聯的套接字列表。發射到房間無非是通過房間中的套接字陣列迭代併發送給每個房間。

一個房間只需要一點點內存來保存每個房間的套接字陣列。除此之外,沒有額外的成本。此外,如果您的替代方案是爲每個主題維護一個套接字數組,那麼您的替代方案可能不會爲您節省太多或其他任何東西。

我的問題:是否可以爲每個主題創建一個空間+消息 類型的組合,這將是5 x 100個房間?

是的,這很容易實現。

請問socket.io的性能如何,還是有更好的辦法來解決這個問題呢 ?

有這麼多房間沒有問題。它的表現是否良好完全取決於你在這麼多房間裏做什麼。如果你正在向很多房間發送大量消息,而每個房間都有很多套接字,那麼如果出現性能問題,你必須進行基準測試。

將單個消息發送到每個單獨的套接字,而不是 使用房間,會更好?

不會有明顯的差異。房間只是一個便利的工具。發射到一個房間,只需要遍歷房間中的每個插座併發送給它 - 就像你提議的那樣。也可以使用內置的房間功能,而不是重新實現自己。

+0

優秀的答案,非常感謝! – simbro

相關問題