同一页面上有多个socket.io连接

时间:2013-04-09 12:18:46

标签: javascript socket.io

我可以连接到客户端同一IP和端口上的多个资源吗?

我有以下代码 -

var myIP = "192.168.1.1";
var myPort = "8080";

A = io.connect(myIP+':'+myPort,{resource: 'A/socket.io'});
B = io.connect(myIP+':'+myPort,{resource: 'B/socket.io'});

A.on('connect',console.log('A connected');
B.on('connect',console.log('B connected');

A.on('message',function(d){console.log('A: '+ d);}
B.on('message',function(d){console.log('B: '+ d);}

我正在myIP:myPort上运行node-http-proxy。 它将A和B上的连接代理到它们各自的socket-io服务器。

如果我在一个脚本上运行上面的代码,浏览器会忽略第二个语句(它不会触发对资源B的请求)。

A和B的on(message)回调都会收到实际属于A的相同数据。

如果我在两个不同的html页面上运行上面的代码(A在一个而B在另一个上),它们工作正常,我分别得到两个数据。

2 个答案:

答案 0 :(得分:10)

试试这个:

A = io.connect(myIP+':'+myPort, {resource: 'A/socket.io', 'force new connection': true});
B = io.connect(myIP+':'+myPort, {resource: 'B/socket.io', 'force new connection': true});

(是的,我删除了一些引号)

答案 1 :(得分:1)

我还要提到命名空间......很多时候你要做的就是按套接字处理重新连接事件,命名空间为你做这件事。他们的主要好处是你不需要每个人都有一个连接,这意味着他们不会为每个域的6个连接限制浏览器做出贡献。

要进行连接,只需执行以下操作:

socket = io('/namespace')