2016-12-25 2 views
3

Ich bin neu in node.js und socket.io. Ich habe nicht verstanden, wie man mit Räumen arbeitet. Ich erschaffe etwas wie eine private Nachricht. Jedes Benutzerpaar hat seinen eigenen Raum.Dynamische Räume in Socket.io

Aus Dokumentation:

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

Aber ich brauche einen Raum von Client-Seite zu erstellen. Weil es dynamisch ist. Wie?

Ich traf einige Beispiele 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?'); 

Diese Linie macht mich verrückt. Es scheint mir dumm. Weil der Server niemals weiß, welches Zimmer er benutzen soll. Der Server kann nur mehrere Räume verwalten.

room = "abc123"; 

Bitte, helfen oder erklären.

Antwort

4

In Ihrem obigen Code haben Sie einen Raum für abc123 festgelegt, den Sie für alle verbundenen Clients dynamisieren müssen. Sie können dem Benutzer auch eine Raumerstellungsoption zur Verfügung stellen. Sie können auch eine Logik zum Ändern/Umbenennen/Verlassen/Verbinden des Raums vom Client bereitstellen. Grundsätzlich können Sie in Ihrem Client und Server logische Änderungen anwenden.

Logik-Client zu aktualisieren oder zu ändern Raum:

socket.emit('switchRoom', newRoom); 

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

} 

Server Logic Zimmerwechsel zu handhaben:

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

Unten Beispiel Siehe:

Socket.io Multi-room Example

Rooms and Namespace in socket.io

+0

Sorry, ich habe dieses Beispiel nicht verstanden. Dieser Stil "swtichRoom", "Updatechat", "SERVER" ist nervig. Schreibe in einen Stil - lowCamelCase. –

+0

Was auch immer ich oben schrieb, ist Beispielcode, Sie können Links verweisen, um mehr @DarynK zu verstehen. – Sumeet

0

Okay, ich habe mein Problem gelöst! Wenn Sie Räume in Namespaces verwenden, vergessen Sie nicht zu schreiben .of('your_namespace')

+0

Hallo habe ich das gleiche Problem können Sie mehr erklären, wie man es beheben kann – radtelbi