2013-09-27 137 views
0

我使用websockets編寫了一個web聊天應用程序。它每頁使用一個連接將新消息推送給在線用戶。在golang中存儲websocket連接的最佳方式是什麼

所以,有很多websocket.Conn來管理。我目前正在使用地圖。

onlineUser = map[int] *websocket.Conn 

當1,000,000頁打開時,我非常擔心地圖。

還有更好的方法來存儲所有的websocket.Conn


Erlang的內部數據庫可以用來存儲erlang套接字。

對於Go,我曾考慮使用「encoding/gob」將套接字緩存在memcached或redis中。但之前使用websocket.Conn它,但被GOB解碼,並將消耗太多的CPU。

+2

一旦你有1E9併發連接,你將會遇到不同的問題。 – Volker

+0

映射是內部的哈希表。 Go的開發人員在這裏做得很好,我不會過多擔心它的性能。 (無論如何,你是否進行了基準測試?) – fuz

回答

2

1,000,000個併發用戶是一個很好的問題。 :)

您的主要問題是websocket規範要求連接保持打開狀態。這意味着你不能序列化和緩存它們。然而,如果你可以對它們進行GOB編碼,並且每個用戶每秒發送一個消息(不現實的高IMO),那麼每秒鐘有一百萬GOB解碼不會佔據你的負載。

此外,一張地圖可以輕鬆處理一百萬個條目。

如果您真的想擔心未來擴展,請弄清楚如何讓您的應用程序的兩個實例在負載上一起工作。然後將其增加到N個實例。

+0

由於該方框仍然需要保持TCP連接處於打開狀態,所以我甚至沒有在編碼它們時進行編碼。 – Xeoncross

相關問題