Websockets和可扩展性

43

我是一个 WebSockets 的初学者。 在我的应用程序中,需要在服务器端发生更改时通知客户端,并计划使用 WebSockets。

  1. 单个服务器实例和单个客户端 ==> 将创建多少个 WebSockets 和多少个 WebSockets 连接?

  2. 单个服务器实例和 10 个客户端 ==> 将创建多少个 WebSockets 和多少个 WebSockets 连接?

  3. 单个服务器实例和 1000 个客户端 ==> 将创建多少个 WebSockets 和多少个 WebSockets 连接?

当您的应用程序有数千个用户时,如何使用 WebSockets 进行扩展?

非常感谢您的反馈。


最好的方法就是去做...创建您的服务器,然后编写新代码来启动大量客户端...许多工具使这变得容易...WebSockets已经被设计用于处理许多10甚至100,000个同时客户端连接。 - Scott Stensland
1个回答

71

1)单个服务器实例和单个客户端 ==> 将创建多少个WebSockets以及WebSockets将建立多少连接?

如果您的客户端创建了一个WebSocket连接,那么客户端和服务器上将会有一个WebSocket连接。 客户端创建WebSocket连接到服务器,因此它是决定将有多少WebSocket连接的客户端。 如果客户端创建3个,则将创建3个。 如果它创建1个,则将创建1个。 通常,客户端只会创建一个。

2)单个服务器实例和10个客户端 ==> 将创建多少个WebSockets以及WebSockets将建立多少连接?

如上所述,这取决于客户端的操作。 如果每个客户端创建1个WebSocket连接并且有10个客户端连接到服务器,则服务器将看到总共10个WebSocket连接。

3)单个服务器实例和1000个客户端 ==> 将创建多少个WebSockets以及WebSockets将建立多少连接?

与第2点相同。

当应用程序具有数千用户时,如何使用WebSockets扩展?

一个适当配置的单个服务器可以处理数十万个同时基本空闲的WebSocket连接,因为空闲的WebSocket几乎不使用服务器CPU。 对于更大规模的部署,可以集群服务器(运行多个服务器进程)并使用黏性负载平衡来分担负载。

在Google上有许多类似这些的文章值得阅读,如果您正在追求大规模的WebSocket或socket.io部署,请参考以下链接:

Phoenix中200万WebSocket连接之路

在AWS上使用Node.js处理60万个并发Websocket连接

千万并发WebSockets

最终,一个正确配置的服务器实现的可扩展性可能更多地取决于每个连接中有多少活动以及传递所需的计算量。


非常感谢您的时间和反馈!还有一个快速问题...“一个单独的服务器,适当配置后可以处理数十万个几乎空闲的同时WebSocket连接,因为空闲的WebSocket几乎不使用服务器CPU。”这是使用内存代理还是外部代理中继? - user3216514
@user3216514 - 我甚至不知道你所说的内存中或外部代理中继是什么意思。也许你应该更好地定义你所询问的内容,并在那个主题上发布一个新问题。 - jfriend00
1
如何使用WebSocket处理集群? - user3216514
@user3216514 - 这不是我们可以在评论中回答的事情(它需要更长的回答)。 如果您搜索并找不到您要查找的内容(虽然我确切知道,这个主题有许多问题/答案),那么您应该发布自己关于聚类的问题。 - jfriend00
当访问一个网站时,服务器会打开一个Web套接字吗?每个连接一个Web套接字? - variable
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接