我用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,000,000 个并发用户是一个很好的问题。 :)
您的主要问题是 websocket 规范要求连接保持打开状态。这意味着您无法序列化和缓存它们。
但是,如果您可以对它们进行 GOB 编码,并且每个用户每秒发送一条消息(IMO 高得不切实际),那么每秒一百万次 GOB 解码不会主导您的负载。
此外,地图可以轻松处理一百万个条目。
如果您真的想担心将来的扩展,请弄清楚如何让应用程序的两个实例在负载上协同工作。然后将其增加到 N 个实例。