在同一页面上使用多个socket.io连接

10

在客户端,我能否连接到同一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);}

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

如果我在单个脚本上运行上述代码,则浏览器会忽略第二个语句(它不会发出到资源B的请求)。

A和B的on(message)回调将接收相同的数据,实际上该数据属于A。

如果我在两个不同的HTML页面上运行上述代码(一个在A页面上,另一个在B页面上),它们可以正常工作并分别获取两者的数据。

2个回答

9

试试这个:

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});

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


"resource" 这个东西是干什么用的? - RandallB
@RandallB:现在它被称为“路径”。这是您想要从中提供socket.io静态JS文件的路径。请查看https://dev59.com/o2cs5IYBdhLWcg3wdz1m - maxdec

1
我还想提一下命名空间......很多时候,你试图以每个套接字为基础处理重新连接事件,命名空间可以为你完成这个任务。它们的主要优点是你不需要为每个命名空间建立一个连接,这意味着它们不会对浏览器的每个域限制6个连接产生贡献。
要连接,只需执行以下操作: socket = io('/namespace')

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