多个HTML5 WebSocket连接

4

是否可以连接多个html5 websocket连接?因为我想要一个websocket连接用于读取,另一个websocket连接用于写入到socket。我想在同一时间点打开具有不同连接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");
};
}
2个回答

2

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

Websocket 可以同时发送数据和接收数据。

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

但是,如果这真的是你的问题,那么你可以在单个页面上拥有多个WebSocket连接。 - eepp

2

是的,你绝对可以。

通常情况下,您可能只想使用相同的WebSocket连接进行发送和接收(WebSocket的全双工、双向性质是将其与常规HTTP连接区分开来的因素之一)。

以下是您可能需要同时拥有多个WebSocket连接到同一服务器的几种情况:

  • 您将在一个方向上发送非常大的消息。分开连接允许您保持具有大型消息的通道不影响另一个通道上的消息延迟。
  • 每个通道具有不同的安全要求。例如,您可以允许任何浏览器客户端连接到只读通道,但要求写入通道进行身份验证。此外,在服务器上为只读连接和写连接运行单独的进程可降低攻击服务的风险(关注点分离)。
  • 每个通道具有不同的扩展要求。例如,您可以在服务器后面拥有一致的数据存储,该存储可以有多个读者,但一次只能有一个编写者。在这种情况下,为只读客户端提供线程或进程池WebSocket服务器可能更加合理,以便这些客户端可以轻松扩展。
  • 服务器实际上只是其他WebSocket服务器的代理,这些WebSocket服务器对客户端不可见,并且它们具有不同的功能(例如,在您的情况下接收或发送数据)。

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

除非您有特定的原因,否则我建议您仅使用单个连接,因为其他条件相等时它更有效率(适用于您的浏览器、中介和服务器)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接