websocket 中的 URI 路径组件是做什么用的?



客户端启动 websocket 握手,并可以指定要使用的自定义 URI 路径。

GET **/chat** HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

websocket uri 采用以下形式: ws-URI = "ws:" "//" 主机 [ ":" 端口 ] 路径 [ "?" 查询 ]

如果我部署一个侦听ws://localhost:8080/的 websocket 服务器,并且客户端使用以下 uriws://localhost:8080/chat连接到那里,有什么区别?为什么甚至需要路径组件?它只是为了负载平衡?还是这些"端点"是隔离的?

RFC 中的以下陈述让我非常困惑:

GET 方法 [RFC2616] 的"请求 URI" 用于标识 WebSocket 连接的端点,两者都允许多个域 从一个 IP 地址提供服务并允许多个 WebSocket 由单个服务器提供服务的终结点。(这里(

如果 websocket 服务始终以相同的方式处理每个连接,则无需在 URI 中使用路径字符串或查询字符串。 (嗯,从技术上讲,你必须有一个路径字符串,但它每次都可以是单个字符"/"。

但是,如果您的 websocket 服务希望能够向不同的客户端提供不同的内容,那么在 URI 中使用路径字符串可能是客户端指示它们感兴趣的内容类型的便捷方法。 也许您的聊天服务为多个不同的主题提供了聊天室,在这种情况下,您可能决定让客户端使用路径字符串来指示所需的主题。 比如ws://localhost:8080/sportws://localhost:8080/politicsws://localhost:8080/cooking,或者你可以更进一步,有ws://localhost:8080/sport/footballws://localhost:8080/sport/golfws://localhost:8080/sport/tennis,等等。

GET 方法 [RFC2616] 的"请求 URI" 用于标识 WebSocket 连接的端点,两者都允许多个域 从一个 IP 地址提供服务...

这只是普通的虚拟主机。 基于URI的host部分,在单个IP地址上运行的Web服务器可以支持多个网站。

。并允许单个服务器为多个 WebSocket 终结点提供服务。

我给出的每个路径示例都标识了一个不同的独立端点,所有端点都由您的一个 websocket 服务器提供服务。

在此特定示例中,websocket 终结点是某种聊天室,但更一般地说,websocket 终结点与某种数据馈送相关联,通常是单向馈送(websocket 可能会为 URI 查询字符串指定的某些股票集合提供当前股票价格流(,但可能是双向馈送和可能的交互式双向馈送(如聊天室(。

最新更新