【问题标题】:WebSockets - one or many?WebSockets - 一个还是多个?
【发布时间】:2012-10-06 17:43:55
【问题描述】:

我在玩 WebSockets 是为了好玩,在后端运行 Tomcat。如果我想与客户端共享多个数据流,是每个流都有一个 WebSocket 还是在一个共享的 WebSocket 上多路复用它们?

每个流都有一个 WebSocket 似乎更容易。我不需要客户端和服务器上的高级逻辑将所有数据汇集到一个管道中,我也不需要我的数据格式中的任何开销来指示每个帧的源/目标。

但是在一个客户端页面上使用多个 WebSocket (5-10) 有什么缺点吗?

【问题讨论】:

    标签: websocket tomcat7


    【解决方案1】:

    当您想允许多个同时使用的用户时,您应该尽量减少每个用户的连接数,因为 TCP/IP 服务器可以同时打开的连接数不是无限的。同时连接的数量在网络服务器配置中受到限制,受操作系统限制,最后但并非最不重要的是受 IP 协议本身架构的限制(只有 2^16 个端口)。

    【讨论】:

    • 好点。此外,像 chrome 这样的浏览器也会限制并发连接数!
    • 虽然我的特定用例最多只期望少数用户,但扩展问题是一个很好的观点,也是共享 websocket 而不是拥有多个专用 websocket 的明确理由。
    • WebSocket 连接使用端口 80,如 WebSocket Wiki 所述,“通信通过 TCP 端口号 80 完成,这对于那些使用防火墙阻止非 Web Internet 连接的环境很有用。”端口数量有限不是问题。
    【解决方案2】:

    我听说(但从未实际测试过)一些浏览器可能会限制从同一选项卡/页面快速创建 Websocket 连接。如果这是真的,它是为了阻止恶意 Javascript 尝试使用 WebSockets 进行端口扫描。但是,除此之外应该没有任何问题。

    但是,由于 WebSockets 是基于消息的(而不是原始流),因此通过一个连接对流量进行复用/解复用并不难。您可以在每条消息的开头添加一个字符以指示哪个流(或者如果您正在发送/接收 JSON 映射,则只需为每条消息添加另一个字段)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2010-09-20
      • 2015-12-29
      • 2011-02-19
      • 1970-01-01
      相关资源
      最近更新 更多