Socket.io: Wie man Räume richtig betritt und verlässt
Ich versuche, Socket.io zu lernen, indem ich eine Reihe von dynamisch erstellten Chatrooms erstelle, die beim Betreten und Verlassen von Räumen "verbundene" und "getrennte" Nachrichten senden. Nach einem Blick auf einPaa vo Frage Ich habe etwas Funktionales zusammengestellt, aber die meisten der verknüpften Antworten stammen von Leuten, die zugeben, dass sie Antworten zusammen gehackt haben, und ich habe festgestellt, dass es eine allgemeinere und aktuellere Diskussion darüber gibt, wie dies auf dem Socket richtig gemacht werden kann. io repo (insbesondereHie undHie)
Als Anfänger weiß ich nicht, ob die folgende Arbeit eine akzeptable Methode ist, um Dinge zu tun, oder ob sie zufällig funktioniert, aber Leistungsprobleme verursacht oder zu viele Zuhörer ergibt. Wenn es eine ideale und offizielle Möglichkeit gibt, Räume zu betreten und zu verlassen, die sich weniger klobig anfühlt, würde ich gerne mehr darüber erfahren.
Klien
var roomId = ChatRoomData._id // comes from a factory
function init() {
// Make sure the Socket is connected
if (!Socket.socket) {
Socket.connect();
}
// Sends roomId to server
Socket.on('connect', function() {
Socket.emit('room', roomId);
});
// Remove the event listener when the controller instance is destroyed
$scope.$on('$destroy', function () {
Socket.removeListener('connect');
});
}
init();
Serve
io.sockets.once('connection', function(socket){
socket.on('room', function(room){ // take room variable from client side
socket.join(room) // and join it
io.sockets.in(room).emit('message', { // Emits a status message to the connect room when a socket client is connected
type: 'status',
text: 'Is now connected',
created: Date.now(),
username: socket.request.user.username
});
socket.on('disconnect', function () { // Emits a status message to the connected room when a socket client is disconnected
io.sockets.in(room).emit({
type: 'status',
text: 'disconnected',
created: Date.now(),
username: socket.request.user.username
});
})
});