多个HTML5 WebSocket连接

时间:2013-06-21 14:06:02

标签: php javascript html5 websocket

是否可以连接多个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");
};
}

2 个答案:

答案 0 :(得分:2)

您不需要两个插槽来进行写入和读取。

websocket既可以发送数据又可以接收数据。

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

答案 1 :(得分:2)

,你绝对可以。

通常,您可能只想使用相同的WebSocket连接进行发送和接收(WebSocket的全双工,双向性质是区别于常规HTTP连接的一种方式)。

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

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

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

还有其他原因需要单独的同时连接,但除非您有特殊原因我建议使用单个连接,因为其他条件相同,它会更有效(对于您的浏览器,中介和服务器)。