Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple socket.io connections on the same page

Can I connect to multiple resources on the same IP and port on the client side?

I have the following code-

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

I am running node-http-proxy on myIP:myPort. It is proxying connections on A and B to their respective socket-io servers.

If I run the above code on a single script, the browser ignores the second statement (It does not fires a request to resource B).

The on(message) callbacks for both A and B recieve the same data which actually belongs to A.

If I run the above code in two different html pages (A on one and B on other), they work fine and I get the data for both separately.

like image 246
arunkjn Avatar asked Apr 09 '13 12:04

arunkjn


2 Answers

Try this:

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

(Yes, I removed some of the quotes)

like image 177
maxdec Avatar answered Nov 08 '22 00:11

maxdec


I would also mention Namespaces... a lot of times what you're trying to do is handle reconnect events on a per socket basis, namespaces do this for you. Their major upside is you don't need to have a connection per each one, which means they don't contribute to the 6-connections-per-domain limit of browsers.

To connect, simply do this:

socket = io('/namespace')

like image 33
RandallB Avatar answered Nov 07 '22 23:11

RandallB