使用代理和负载均衡器时,WebSocket存在哪些问题?

13
我正在研究SockJS node server。文档中说:
通常情况下,WebSockets与代理和负载均衡器不兼容。在Nginx或Apache后部署SockJS服务器可能会很麻烦。幸运的是,最近版本的优秀负载均衡器HAProxy能够代理WebSocket连接。我们建议将HAProxy作为第一线负载均衡器,并使用它来分离SockJS流量和正常HTTP数据。
我想知道有没有人能扩展一下HAProxy在这种情况下解决的问题?具体来说:
1.为什么WebSockets与代理和负载均衡器不兼容?
2.为什么在Apache后面部署Sockjs服务器很麻烦?
1个回答

17

1. 为什么WebSockets与代理和负载均衡器不兼容?

我建议您阅读Peter Lubbers撰写的How HTML5 Web Sockets Interact With Proxy Servers一文。它应该涵盖有关WebSocket和代理(以及负载均衡器)的所有必要信息。

2. 为什么在Apache后部署Sockjs服务器很麻烦?

虽然有a module for handling WebSocket connections模块来处理WebSocket连接,但目前Apache并不原生支持WebSocket,而根据此bug文件HTML5 Websocket implementation,看起来它也不会很快支持。建议使用模块模式更好。

因此,这很“麻烦”,只是因为它不容易——没有官方支持,因此它没有其他情况下可能拥有的社区使用。

在SockJS中,可能还会出现其他问题,因为它具有基于HTTP的回退传输。因此,当使用回退时,您需要代理WebSocket连接(使用apache-websocket模块)和HTTP请求。
相关内容:Nginx v1.3于二月份发布,支持WebSocket。

谢谢,Peter Lumbbers的文章非常有启发性。此外,每个运行Apache并使用Web套接字的人都必须安装您提到的apache-websocket模块吗?如果使用诸如socket.io或sockjs之类的库,是否需要此模块? - dev.e.loper
您不必安装该模块。您可以将实时基础架构与标准 Web 堆栈并行运行。因此,使用 socket.Io/sockjs - 不需要该模块。 - leggetter
哦,没错,因为socket.io和sockjs使用的服务器是在node.js上运行而不是Apache上。 - dev.e.loper

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