2013-06-21 103 views
3

是否可以连接到多个html5 websocket连接? 正如我想有一个websocket连接读取和其他websocket连接写入套接字。 我想用不同的连接ID在相同的时间点打开。多个HTML5 WebSocket连接

例如:

$(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

你并不需要两个插槽写入和读取。

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

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

但是,如果这真的是你的问题,你可能在一个页面上有多个WebSocket连接。 – eepp

2

,你绝对可以。

一般而言,您可能只是希望为发送和接收使用相同的WebSocket连接(WebSocket的全双工,双向性是区分它与常规HTTP连接的一个方面)。

有一些情况下,您可能希望有多个并发WebSocket连接到同一台服务器:

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

注意,对于你上面描述的情况并不一定需要使用不同的端口和连接可以转而使用不同的请求路径和具有逻辑在服务器获取到正确的目的地进程/服务器的连接, 。

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