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

tun*_*nuz 14 websocket

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

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

kan*_*aka 27

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

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

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

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

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

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

有些约束可能会迫使一个模型或另一个模型:

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

  • 很棒的答案@kanaka.以同样的方式,我喜欢[关注点分离]的想法(http://en.wikipedia.org/wiki/Separation_of_concerns),在编写代码时,我也喜欢将这个想法引入到架构中.在某些情况下,插件模型很好,但是当涉及构建更大的应用程序时,或者如果消息速率达到一定水平,则将Web服务器,Web应用程序功能和WebSocket服务器分开,以实现实时双向功能,恕我直言是一个好主意.这是我对使用node.js和socket.io构建的所有应用程序的关注. (2认同)
  • @leggetter,另一方面,如果 Web 服务和 WebSocket 属于同一关注点,那么 [功能内聚原则](http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29) 适用并且会推动他们在一起。例如,如果初始页面加载是通过 HTTPS,然后使用通过 WebSockets 发送的数据实时更新页面的一部分,并且新数据与最初提供的数据密切相关(并具有相同的访问控制等)通过 HTTPS,那么 Web 服务和 WebSockets 成为一个有凝聚力的单元可能更有意义。 (2认同)