我们正在构建一个必须维护大量已连接客户端的应用程序。 将有一台服务器作为中继服务器。我们有一个原始服务器,它将向中央服务器发送tcp或UDP流(这是我们的选择),该中央服务器将通过UDP将消息中继到所有连接的客户端。一秒钟内将发送多封邮件,至少20条。
假设已经解决了NAT遍历的客户端流。关键是,该应用程序将维护大量连接的客户端(单个服务器可以负担的最大值),并且中继服务器收到的每条消息都将广播到所有连接的客户端。这是一个实时应用程序,因此理想情况下,所有客户端都应同时接收相同的消息,或者更好地进行解释,所有消息/数据包应同时写入套接字,以防止客户端之间的意外延迟(至少从我们的服务器)。
我正在尝试使用NodeJS,并获得了10.000个模拟客户端的一般结果,但我想超越这个范围。 CPU / RAM似乎不是问题,感觉像遍历这么大的数组,这是这里的瓶颈。我正在具有4个内核和16GB RAM的AWS t2.xlarge实例上尝试此操作,但是我已经尝试使用更大的实例,并且差异并不太大。
维护为每个客户端打开的套接字更好还是将其写入同一套接字更好?您将如何处理?您将如何缩放?这种实时,高并发,高吞吐量应用程序将使用哪种语言?
当然,所有这些都将得到扩展,但我需要通过有效地使用我们的服务器来尽可能降低成本。
非常感谢您。