我正在使用web-sockets
开发一个需要实时数据的Web应用程序。
使用网络应用程序的客户数量将超过10万。
服务器端Web套接字编码在Java中完成。一个Web套接字服务器可以处理这么多连接吗?
如果没有,我怎样才能做到这一点。我只能使用网络套接字。
答案 0 :(得分:1)
WebSocket服务器与任何其他基于TCP的服务器一样,可以打开大量连接。它们可以是基于文件描述符的。您可以在Linux上轻松找到最大(系统范围)的FD:
%cat / proc / sys / fs / file-max 165038
系统范围内有用户限制的内核参数(以及像“ulimit”这样的shell级别的东西)。顺便说一下,你需要编辑/etc/sysctl.conf以在重启过程中增加你的FD模块。
当然,您可以将此数字增加到您想要的任何数量(对内核内存的比例影响)。
或者服务器可以通过技巧来复用单个连接。
但真正的问题是,流经连接的数据的概况是什么?你有100K用户每天获得1个64字节的消息吗?或者这些100K用户每秒获得50条1K消息? WebSocket服务器是否可以通过多个NIC分割其连接(即,分散I / O负载)?消息是否全部加密,因此需要大量的CPU?您可以轻松地对WebSocket服务器进行集群,因此故障转移对您来说很容易,对您的用户来说也很容易吗?您的服务器任务/业务是否至关重要?...也就是说,如果发生灾难,您能否让100K用户消失?在考虑WebSocket服务器的可伸缩性时,需要考虑许多问题。
在我们的实验室中,我们可以在服务器上创建数百万个连接(以及群集中的更多连接)。在现实世界中,除了文件描述符之外,还需要在生产部署中考虑其他“规模”因素。希望这会有所帮助。
完全披露:我为WS供应商Kaazing工作。
答案 1 :(得分:0)
正如FrankG上面解释的那样,WebSocket连接的数量取决于用例。
以下是使用MigratoryData WebSocket Server的两个基准测试用于两个非常不同的用例,这些用例也详细说明了系统配置(但是请注意,系统配置只是一个细节,并且通过MigratoryData的体系结构实现了高可扩展性。专为拥有数百万用户的实时网站而设计。
在一个用例中,MigratoryData扩展到1000万个并发连接(同时提供~1 Gbps消息传递):
在另一个用例中,MigratoryData扩展到192,000(同时提供~9 Gbps):
这些数字是在MigratoryData WebSocket Server的单个实例上实现的。 MigratoryData可以进行群集,因此您也可以有效地水平扩展到任意数量的订阅者。
完全披露:我为MigratoryData工作。