什么';golang中存储websocket连接的最佳方式是什么

什么';golang中存储websocket连接的最佳方式是什么,websocket,go,Websocket,Go,我使用websockets编写了一个网络聊天应用程序。它每页使用一个连接将新消息推送到在线用户 因此,需要管理大量的websocket.Conn。我正在使用地图 onlineUser = map[int] *websocket.Conn 当1000000页打开时,我非常担心地图 有更好的方法来存储所有的websocket.Conn Erlang的内部数据库可用于存储Erlang套接字 对于Go,我考虑过使用“encoding/gob”在memcached或redis中缓存套接字。但是在使用w

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

因此,需要管理大量的
websocket.Conn
。我正在使用地图

onlineUser = map[int] *websocket.Conn
当1000000页打开时,我非常担心地图

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


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


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

1000000个并发用户是一个很好的问题。:)

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

然而,如果你能对它们进行GOB编码,并且每一个用户每秒发送一条消息(在我看来,这是不切实际的高),那么每秒一百万GOB解码并不能控制你的负载

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


如果您真的想担心将来的伸缩性,请考虑如何让应用程序的两个实例在负载上协同工作。然后将其增加到N个实例。

1000000个并发用户是一个很好的问题。:)

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

然而,如果你能对它们进行GOB编码,并且每一个用户每秒发送一条消息(在我看来,这是不切实际的高),那么每秒一百万GOB解码并不能控制你的负载

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


如果您真的想担心将来的伸缩性,请考虑如何让应用程序的两个实例在负载上协同工作。然后将其增加到N个实例。

一旦您拥有1e9并发连接,您将遇到不同的问题。映射在内部是一个哈希表。我不会太担心它的性能,因为Go开发人员在这里做得很好。(你是否进行了基准测试?)。我不会太担心它的性能,因为Go开发人员在这里做得很好。(不管怎样,您是否进行了基准测试?)我看不到偶数gob编码的意义,因为该框仍然必须保持TCP连接打开。我看不到偶数gob编码的意义,因为该框仍然必须保持TCP连接打开。