websocket - WebSocket 真的应该由 Web 服务器处理吗?

标签 websocket

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

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

最佳答案

WebSocket 协议(protocol)在设计时考虑了三种模型:

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

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

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

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

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

有一些约束可能会强制采用一种或另一种模型:

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

关于websocket - WebSocket 真的应该由 Web 服务器处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215088/

相关文章:

Web 服务器上的 PHP Websocket

Python:同时两个循环

sockets - 使用 Deflate 压缩数据查找 block 标记 Flash ByteArray 的结尾

firefox - 如何在Firefox中监视WebSocket框架

javascript - Chrome 无法连接到 websocket 服务器(操作码 -1) "handshake was canceled"

java - Websocket 文件上传速度问题(Java websocket API 和 Javascript)

java - WebSockets - 创建 channel 和推送数据的正确方法

java - Play框架用java中的actor处理websocket

node.js - 如何将 websocket 连接代理到 NodeJS 中的其他 websockets

arrays - 通过 Golang 中的 Websocket 发送和接收 [][] 字节