2013-04-09 38 views
8

我可以連接到客戶端同一IP和端口上的多個資源嗎?同一頁面上有多個socket.io連接

我有以下的代碼 -

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的請求)。

on(message)回調A和B都收到其實際上屬於A.

如果I(上和B之一上的其它A)運行在兩個不同的html頁面上述代碼中,它們很好地工作相同的數據我分別得到了兩者的數據。

回答

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

(是的,我刪除了一些報價)

+0

是的,它爲我的作品!非常感謝 – arunkjn 2013-04-09 13:10:43

+0

'資源'的功能是什麼? – RandallB 2016-04-30 23:46:42

+0

@RandallB:現在叫'路徑'。這是你想從中提供socket.io靜態JS文件的路徑。檢查http://stackoverflow.com/questions/12824612/change-socket-io-static-file-serving-path – maxdec 2016-05-02 12:26:53

0

我還要提到的命名空間......很多時候,你正在試圖做的是重新手柄事件在每個套接字的基礎上,命名空間爲你做這件事。他們的主要優點是你不需要每個人都有一個連接,這意味着他們不會對瀏覽器的每個域的6個連接的限制做出貢獻。

要連接,只要做到這一點:

socket = io('/namespace')