我使用websockets编写了一个网络聊天应用程序。它每页使用一个连接将新消息推送给在线用户。
因此,需要管理很多websocket.Conn
。我目前正在使用地图。
onlineUser = map[int] *websocket.Conn
当1,000,000页打开时,我非常担心地图。
有一种更好的方法来存储所有websocket.Conn
?
Erlang的内部数据库可用于存储erlang套接字。
对于Go,我曾考虑使用“encoding / gob”来缓存memcached或redis中的套接字。但是在使用websocket.Conn
之前,它会被GOB解码并且会消耗太多的CPU。
答案 0 :(得分:3)
1,000,000个并发用户是一个很好的问题。 :)
您的主要问题是websocket规范要求连接保持打开状态。这意味着您无法序列化和缓存它们。
但是,如果你可以对它们进行GOB编码,并且每个用户每秒发送一条消息(不切实际的高IMO),那么每秒一百万个GOB解码将无法控制你的负载。
地图也可以轻松处理一百万个条目。
如果您真的想要担心将来的扩展,请弄清楚如何让两个应用程序实例在加载时协同工作。然后将其增加到N个实例。