2011-07-17 33 views
12

用socket.io管理多個聊天室的正確方法是什麼?用socket.io管理多個聊天室的正確方法是什麼?

所以在服務器上會有這樣的:

io.sockets.on('connection', function (socket) { 
    socket.on('message', function (data) { 
    socket.broadcast.emit('receive', data); 
    }); 
}); 

現在,這會工作的優良一個房間,因爲這將信息廣播給所有誰連接。你如何發送消息給處於特定聊天室的人?

添加.of('/ chat/room_name')? 或者將每個人的數組存儲在一個房間裏?

回答

18

Socket.IO V0.7現在讓你每一個命名空間你Socket定義:

var room1 = io.connect('/room1'); 
room1.on('message', function() { 
    // chat socket messages 
}); 
room1.on('disconnect', function() { 
    // chat disconnect event 
}); 

var room2 = io.connect('/room2'); 
room2.on('message', function() { 
    // chat socket messages 
}); 
room2.on('disconnect', function() { 
    // chat disconnect event 
}); 

隨着不同的插座,可以有選擇地發送給你想具體的命名空間。

Socket.IO V0.7也有 「房」

io.sockets.on('connection', function (socket) { 
    socket.join('a room'); 
    socket.broadcast.to('a room').send('im here'); 
    io.sockets.in('some other room').emit('hi'); 
}); 

來源的概念:http://socket.io/#announcement

+0

謝謝,我想第二個例子是我所尋找的房間是動態創建的。因此,讓我們說我有兩個部分,聊天和組。我會做io.connect('/ chat OR/group')並且讓socket.join('GROUP或CHAT ID')連接到特定的組或聊天嗎? –

+0

我相信如此。第一個允許你有不同的頻道訂閱,第二個給你一個簡單的房間概念,你可以分組不同的套接字。 – sntran

2

更新:兩個Now.js和大橋都已經死了,看到now.js deadbridge dead。 Socket.io似乎採用了v0.9以來的回調函數,這是向前邁出的一大步。

雖然它不是直接相關Socket.io,Now.js(更高的抽象層ontop的Socket.io)的支持團體 - http://nowjs.com/doc

他們在他們的offocial多房間聊天例子回購這裏:https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js

+0

該項目可能已經死亡,網頁爲404,上一次提交爲一年前。 – jcollum

+0

@jcollum正確,更新後。 – balupton

相關問題