WebSocket标准还没有被批准,但是从草案来看,这项技术似乎是要在Web服务器中实现的。pywebsocket实现了一个WebSocket服务器,它可以作为Apache插件专用或加载。
所以我想知道的是:WebSockets的理想用途是什么?使用专用的WebSocket服务器来实现服务是否有意义,还是重新考虑在支持WebSocket的Web服务器上运行更好?
WebSocket协议在设计时考虑了三个模型:
- 一个完全独立于任何web服务器运行的WebSocket服务器。
- WebSocket服务器与web服务器分开运行,但流量从web服务器代理到WebSocket服务器(允许WebSocket和HTTP流量在同一端口上共存)
- WebSocket服务器在web服务器中作为插件运行。
您选择的模型实际上取决于您试图构建的应用程序和其他一些可能限制您选择的约束。
例如,如果你的应用程序将从单个web服务器提供服务,并且WebSocket连接将始终返回到同一台服务器,那么将WebSocket服务器作为web服务器中的插件/模块运行可能是有意义的。
另一方面,如果你有一个通用的WebSocket服务,可以在许多不同的网站上使用(例如,你可以从WebSocket服务器上获得连续的低延迟流量更新),那么你可能想要将WebSocket服务器与任何web服务器分开运行。
基本上,你的WebSocket服务和web服务之间的集成越紧密,你就越有可能想要在同一个端口上同时运行它们。
有一些约束可能强制一个模型或另一个:
- 如果你控制服务器但不控制传入防火墙规则,那么你可能别无选择,只能在与HTTP/HTTPS服务器(例如80和443)相同的端口上运行WebSocket服务器。在这种情况下,你必须使用web服务器插件或代理到真正的WebSocket服务器。 另一方面,如果你在运行WebSocket服务器的服务器上没有超级用户权限,那么你可能无法使用端口80和443(1024以下通常是特权端口范围),在这种情况下,是否在同一端口上运行HTTP/S和WebSocket服务器并不重要。
- 如果你在web服务器中有基于cookie的身份验证(如OAuth),并且你想在WebSocket连接中重用它,那么你可能想要将它们一起运行(紧密集成的特殊情况)。