2016-12-25 45 views
3

我是node.js和socket.io中的新成員。我不明白如何與房間合作。我正在創建一個私人消息。每對用戶都有其獨特的空間。Socket.io中的動態房間

從技術文檔:

io.on('connection', function(socket){ 
    socket.join('some room'); 
}); 

但我需要創建一個客戶端的房間。因爲它是動態的。怎麼樣?

我遇到了一些例子https://gist.github.com/crtr0/2896891

server.js

io = socketio.listen(server); 

io.sockets.on('connection', function(socket) { 
    socket.on('room', function(room) { 
     socket.join(room); 
    }); 
}); 

room = "abc123"; 
io.sockets.in(room).emit('message', 'what is going on, party people?'); 

此行讓我發瘋。在我看來,愚蠢。因爲服務器永遠不知道要使用哪個空間。服務器只能處理多個房間。

room = "abc123"; 

請幫忙或解釋。

回答

4

在上述代碼中,您已將空間固定爲abc123,您需要使其對所有連接的客戶端都是動態的。您可以爲用戶提供房間創建選項,還可以提供從客戶端更改/重命名/離開/加入房間的邏輯。基本上在您的客戶端和服務器上,您可以在邏輯更改下應用。

客戶端邏輯來更新或改變房間:

socket.emit('switchRoom', newRoom); 

socket.on('updaterooms', function(rooms, current_room) { 
    // Update new room logic 

} 

服務器邏輯來處理室改變:

socket.on('switchRoom', function(newroom){ 
     // leave the current room (stored in session) 
     socket.leave(socket.room); 
     // join new room, received as function parameter 
     socket.join(newroom); 
     socket.emit('updatechat', 'SERVER', 'you have connected to '+ newroom); 
     // sent message to OLD room 
     socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username+' has left this room'); 
     // update socket session room title 
     socket.room = newroom; 
     socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room'); 
     socket.emit('updaterooms', rooms, newroom); 
    }); 

參見下面的實施例:

Socket.io Multi-room Example

Rooms and Namespace in socket.io

+0

對不起,我不明白這個例子。這種風格「swtichRoom」,「updatechat」,「服務器」很煩人。寫入一種風格 - lowerCamelCase。 –

+0

我上面寫的是示例代碼,你可以參考鏈接瞭解更多@DarynK。 – Sumeet

0

好的,我解決了我的問題!如果你使用命名空間中的房間,別忘了寫.of('your_namespace')

+0

你好我有同樣的問題,你可以解釋更多如何解決它 – radtelbi