什么是存储大量sockets的最佳做法?

为了testing的目的,我想创build一个套接字服务器,它将包含1000多个并发的套接字连接,分布在AWS上的X个ec2实例上(仍然决定使用JXCore,Java或Erlang的node.js)。 这些套接字将每隔10秒将消息随机发送到另一个套接字。 我只是无法理解如何有效地存储和读取这些套接字。

我可以看到的两个选项是将套接字对象存储在应用程序本身的地图中,或者将套接字存储在快速数据库(如Redis)中。 将套接字存储在应用程序内部的数据结构中的问题是它将能够扩展,变得健壮,以及当数百万个套接字需要find另一个套接字时,读取性能如何。 而且如果我把它们存储在像redis这样的数据库之类的地方,每次都必须有一个networking调用,因为Socket A需要知道Socket B发送消息的位置。 我担心这会大大降低性能。

我想知道什么是可扩展套接字服务器的最佳做法,因为我无法find任何在互联网上回答这个问题。 我在网上find的每个套接字服务器简单地广播到每个其他套接字,而不是有特定的套接字,只包含像10个套接字。

如果您希望将此应用程序分布在多个节点上,则需要有一种方法来至less确定目标节点。 如果它可能是源包和当前包的纯函数,则不需要中央存储器,这是最好的解决scheme。

在其他情况下,中央存储是不可避免的,但是可能会采取一些优化来减less访问。 本地套接字可以很容易地存储在本地地图中(erlang中的ets或mnesia,其他语言中的共享singleton地图),并首先进行检查。 可能会要求源caching目标地址,以便数据包将包含所有必要的信息。 或者,目标caching可以存储在源套接字节点上,而不依赖于客户端行为。 该caching可以用于路由,并且只有在路由操作不成功时才可以访问中央存储器。

这可能是其他一些优化,这取决于你的情况。