【问题标题】:What's the URI path component in websocket used for?websocket中的URI路径组件是做什么用的?
【发布时间】:2020-06-19 15:48:44
【问题描述】:

客户端发起 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:" "//" host [ ":" port ] path [ "?" query ]

如果我部署了一个监听ws://localhost:8080/ 的 websocket 服务器,并且一个客户端使用以下 uri ws://localhost:8080/chat 在那里连接,有什么区别?为什么路径组件甚至是必要的?它只是为了负载平衡吗?还是这些“端点”是孤立的?

RFC 中的以下声明让我很困惑:

GET 方法 [RFC2616] 的“Request-URI”用于标识 WebSocket 连接的端点,都允许多个域 从一个 IP 地址提供服务并允许多个 WebSocket 由单个服务器提供服务的端点。 (HERE)

【问题讨论】:

    标签: http websocket endpoint


    【解决方案1】:

    如果您的 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] 的“Request-URI”用于标识 WebSocket 连接的端点,都允许多个域 从一个 IP 地址提供服务...

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

    ...并允许单个服务器为多个 WebSocket 端点提供服务。

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

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

    【讨论】:

    • 感谢您澄清这些概念。但是,我对如何实施该逻辑有一些疑问。如果您了解 Twisted Framework (python),这将是一个很好的猜测:) 您在以下代码中看到 sn-p websocket 库的作者决定使用“putChild”接口来代表“文件”资源添加自定义 websocket 路径。尽管对于单个 url 路径看起来足够了,但我认为为特定端点(以及 WebsocketServerFactory 的新实例)创建多个服务器协议并不方便。你会推荐(1/2)
    • 有一个服务器协议检查请求实例内的路径?因此,这种方式有不同的对象或函数实现该特定端点的逻辑吗?或者你会像我描述的那样推荐几个自定义服务器协议,每个协议都是为特定端点构建的?github.com/crossbario/autobahn-python/blob/master/examples/… (2/2)
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2013-04-02
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多