我正在玩 WebSockets 来获得乐趣,在后端运行 Tomcat。如果我想与客户端共享多个数据流,是每个流都有一个 WebSocket 还是在一个共享的 WebSocket 上多路复用它们?
每个流都有一个 WebSocket 似乎更容易。我不需要客户端和服务器上的高级逻辑将所有数据集中到一个管道中,并且我不需要数据格式中的任何开销来指示每个帧的源/目标。
但是在一个客户端页面上使用多个 WebSockets (5-10) 有什么缺点吗?
当您想允许多个同时使用的用户时,您应该尽量减少每个用户的连接数,因为 TCP/IP 服务器可以同时打开的连接数不是无限的。在 webservers 配置中,同时连接的数量受到操作系统的限制,最后但并非最不重要的是 IP 协议本身的架构(只有 2^16 个端口)。
我听说过一些浏览器可能会限制从同一选项卡/页面快速创建 Websocket 连接的谣言(但从未实际测试过)。如果它是真的,它会阻止恶意 Javascript 尝试使用 WebSockets 进行端口扫描。但是,除此之外应该没有任何问题。
但是,由于 WebSockets 是基于消息的(而不是原始流),因此通过一个连接对流量进行复用/解复用并不难。您可以在每条消息的开头添加一个字符以指示哪个流(或者如果您正在发送/接收 JSON 映射,则只需向每条消息添加另一个字段)。