WebSocket是否真的意味着由Web服务器处理?

时间:2011-11-21 16:29:45

标签: websocket

WebSocket标准尚未批准,但从草案看来,该技术似乎是在Web服务器中实现的。 pywebsocket实现了一个WebSocket服务器,可以作为Apache插件专用或加载。

所以我想知道的是:WebSockets的理想用途是什么?使用专用WebSocket服务器实现服务是否有任何意义,或者更好地重新考虑它以在支持WebSocket的Web服务器上运行?

1 个答案:

答案 0 :(得分:26)

WebSocket协议的设计考虑了三个模型:

  • 与任何Web服务器完全分开运行的WebSocket服务器。
  • 与Web服务器分开运行的WebSocket服务器,但是从Web服务器代理到websocket服务器的流量(允许websocket和HTTP流量在同一端口上共存)
  • 在Web服务器中作为插件运行的WebSocket服务器。

您选择的模型实际上取决于您尝试构建的应用程序以及可能限制您选择的其他一些约束。

例如,如果您的应用程序将从单个Web服务器提供,并且WebSocket连接将始终返回到同一服务器,那么将WebSocket服务器作为插件/模块运行可能是有意义的。网络服务器。

另一方面,如果您有一个可从许多不同网站使用的通用WebSocket服务(例如,您可以从WebSocket服务器提供连续的低延迟流量更新),那么您可能希望运行WebSocket服务器与任何Web服务器分开。

基本上,WebSocket服务与Web服务之间的集成越紧密,您就越有可能想要在同一端口上一起运行它们。

有些限制可能会迫使一个模型或另一个模型:

  • 如果您控制服务器而不是传入的防火墙规则,那么您可能别无选择,只能在与HTTP / HTTPS服务器相同的端口上运行WebSocket服务器(例如80和443)。在这种情况下,您将不得不使用Web服务器插件或代理到真正的WebSocket服务器。
  • 另一方面,如果您在运行WebSocket服务器的服务器上没有超级用户权限,那么您可能无法使用端口80和443(1024以下通常是特权端口范围并且在这种情况下,是否在同一端口上运行HTTP / S和WebSocket服务器并不重要。
  • 如果您在Web服务器中有基于cookie的身份验证(例如OAuth),并且您希望将其重新用于WebSocket连接,那么您可能希望将它们一起运行(特殊情况下的紧密集成)。