多个 HTML5 WebSocket 连接

Posted

技术标签:

【中文标题】多个 HTML5 WebSocket 连接【英文标题】:Multiple HTML5 WebSocket Connection 【发布时间】:2013-06-21 14:06:01 【问题描述】:

是否可以连接到多个 html5 websocket 连接? 因为我想有一个用于读取的 websocket 连接和用于写入套接字的其他 websocket 连接。 我想在同一时间使用不同的连接 ID 打开。

例如:

$(document).ready(function () 
    conn = , window.WebSocket = window.WebSocket || window.MozWebSocket;     
    connection1();
);

function connection1() 

// uses global 'conn' object
if (conn.readyState === undefined || conn.readyState > 1) 

conn1 = new WebSocket('ws://ip1:8101');
conn2 = new WebSocket('ws://ip1:8102');

//connection open 
conn1.onopen = function () 
conn1.send("Connection1 Established Confirmation");
;

conn2.onopen = function () 
conn2.send("Connection2 Established Confirmation");
;

【问题讨论】:

【参考方案1】:

您不需要两个套接字来写入和读取。

一个websocket既可以发送数据也可以接收数据。

var socket = new WebSocket('ws://ip1:8101'); 
socket.onopen = function()
    socket.send("Hello server");
;
socket.onmessage = function(message)
    // Handle the message
;

【讨论】:

但是,如果这真的是您的问题,您可能在一个页面上有多个 WebSocket 连接。【参考方案2】:

是的,你绝对可以。

一般来说,您可能只想对发送和接收使用相同的 WebSocket 连接(WebSocket 的全双工、双向特性是它与常规 HTTP 连接的区别之一)。

在某些情况下,您可能希望同时有多个 WebSocket 连接到同一服务器:

您将向一个方向或另一个方向发送非常大的消息。分离连接可以让您保持具有大量消息的通道不会影响另一个通道上的消息延迟。 您对每个通道都有不同的安全要求。例如,您可以允许任何浏览器客户端连接到只读通道,但需要在写入通道上进行身份验证。此外,在服务器上为只读连接和写入连接运行单独的进程会降低您的漏洞攻击服务(关注点分离)。 每个通道都有不同的缩放要求。例如,您可能在服务器后面有一个一致的数据存储,它可以有许多读取器,但一次只能有一个写入器。在这种情况下,使用线程或进程池 WebSocket 服务器为只读客户端提供服务以允许它们轻松扩展可能是有意义的。 服务器实际上只是对客户端不直接可见的其他 WebSocket 服务器的代理,它们具有不同的功能(例如,在您的情况下接收或发送数据)。

请注意,对于上述情况,您不一定需要使用单独的端口,而是可以在连接中使用不同的请求路径,并在服务器中设置逻辑以获取与正确目标进程/服务器的连接。

同时存在单独的连接还有其他原因,但除非您有特定原因,否则我建议使用单个连接,因为在其他条件相同的情况下,它更有效(对于您的浏览器、中介和服务器)。

【讨论】:

以上是关于多个 HTML5 WebSocket 连接的主要内容,如果未能解决你的问题,请参考以下文章

web新特性 之 WebSocket

HTML5 Websocket 在发送消息之前等待连接和就绪状态更改

微信小程序配置websocket环境及如何在小程

websocket简介

WebSocket

WebSocket相关