2013-09-27 99 views
0

我使用websockets编写了一个web聊天应用程序。它每页使用一个连接将新消息推送给在线用户。在golang中存储websocket连接的最佳方式是什么

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

onlineUser = map[int] *websocket.Conn 

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

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


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

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

+2

一旦你有1E9并发连接,你将会遇到不同的问题。 – Volker

+0

映射是内部的哈希表。 Go的开发人员在这里做得很好,我不会过多担心它的性能。 (无论如何,你是否进行了基准测试?) – fuz

回答

2

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

您的主要问题是websocket规范要求连接保持打开状态。这意味着你不能序列化和缓存它们。然而,如果你可以对它们进行GOB编码,并且每个用户每秒发送一个消息(不现实的高IMO),那么每秒钟有一百万GOB解码不会占据你的负载。

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

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

+0

由于该方框仍然需要保持TCP连接处于打开状态,所以我甚至没有在编码它们时进行编码。 – Xeoncross

相关问题