0

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

所以,有很多事情websocket.Conn要管理。我目前正在使用地图。

onlineUser = map[int] *websocket.Conn

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

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


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

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

4

1 回答 1

3

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

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

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

此外,地图可以轻松处理一百万个条目。

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

于 2013-09-28T16:12:31.857 回答