http - 负载平衡 Web 套接字和长轮询

标签 http nginx websocket load-balancing haproxy

如果我有一个 Web 应用程序在 3 台支持 Web 套接字的计算机上运行,​​并且客户端连接到其中一台计算机,则每个请求是否始终发送到同一台计算机,或者负载均衡器可以将其发送到不同的计算机吗?

基本上,一旦网络浏览器通过网络套接字建立连接,负载均衡器是否可以将每个请求发送到不同的服务器?

如果可以,哪些负载均衡器可以做到这一点?

此外,如果我使用类似氛围的框架来检测浏览器兼容性并选择适当的协议(protocol),这将如何影响负载平衡机会?

最佳答案

basic description of websockets protocol on Wikipedia 中所述通过 HTTP 协议(protocol)完成握手后,将通过与确切服务器的持久 TCP 连接执行其他通信。

因此,不会有通常 HTTP 含义中的“请求”,只有 2 个端点(服务器和客户端)交换数据。这就是为什么通常意义上的负载平衡是不可能的(并且通常不需要,因为服务器能够同时处理相当多的并发 TCP 连接 - 关于这一点的很好的讨论 here )。这就是为什么通过 websocket 发送的数据总是会被正确的服务器机器(期望它的机器)接收。

如果您确实需要这个,您可以使用L3负载均衡器,如上面提到的帖子中所述。

关于http - 负载平衡 Web 套接字和长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182494/

相关文章:

http - 缓存破坏如何在 index.html 上工作?

ruby - 每隔 x 秒单击一次按钮的网站脚本

react-native - React Native没有连接到socket.io

javascript - 如何从 HTML 客户端调用 Websocket?

c# - 为什么带有 "@"的链接在我的浏览器中有效,但 C# HttpWebRequest 给出 404(远程服务器返回错误 : (405) Method Not Allowed.)

与 scala 的 http session

wordpress - Nginx url 重写 WordPress 与 ModPageSpeed 冲突

linux - 不小心删除了/etc/nginx,无论如何重新生成你的自定义nginx.conf?

ruby - 通过 Nginx 的 EventSource/Server-Sent 事件

python - flask-socket.io : frequent time-outs