在golang中存储websocket连接的最佳方法是什么

时间:2013-09-27 16:03:46

标签: websocket go

我使用websockets编写了一个网络聊天应用程序。它每页使用一个连接将新消息推送给在线用户。

因此,需要管理很多websocket.Conn。我目前正在使用地图。

onlineUser = map[int] *websocket.Conn

当1,000,000页打开时,我非常担心地图。

有一种更好的方法来存储所有websocket.Conn


Erlang的内部数据库可用于存储erlang套接字。

对于Go,我曾考虑使用“encoding / gob”来缓存memcached或redis中的套接字。但是在使用websocket.Conn之前,它会被GOB解码并且会消耗太多的CPU。

1 个答案:

答案 0 :(得分:3)

1,000,000个并发用户是一个很好的问题。 :)

您的主要问题是websocket规范要求连接保持打开状态。这意味着您无法序列化和缓存它们。

但是,如果你可以对它们进行GOB编码,并且每个用户每秒发送一条消息(不切实际的高IMO),那么每秒一百万个GOB解码将无法控制你的负载。

地图也可以轻松处理一百万个条目。

如果您真的想要担心将来的扩展,请弄清楚如何让两个应用程序实例在加载时协同工作。然后将其增加到N个实例。