Ich arbeite gerade an einem einfachen Chat mit socket.io. Die Grundlagen funktionieren bereits, aber jetzt versuche ich 2 verschiedene Namespaces zu implementieren. Ich möchte, dass der Client von einem Namespace (support-chat) zum anderen (friends-chat) per Knopfdruck wechseln kann.socket.io Namespaces umschalten
Server
//default namespace
io.on('connection', function(socket){
console.log('a user connected to the chat');
socket.on('disconnect', function(){
console.log('user disconnected');
});
socket.on('client message', function(msg){
io.emit('server_message', msg);
});
});
//namespace /support
var sup = io.of('/support');
sup.on('connection', function(socket){
console.log('someone entered the support-chat');
socket.on('disconnect', function(){
console.log('user disconnected from support-chat');
});
//recieving and emitting message to all clients in namespace /support
socket.on('client message', function(msg){
console.log('message received: ' + msg);
io.of('/support').emit('server_message', msg);
});
});
//namespace /friends
var frnd = io.of('/friends');
frnd.on('connection', function(socket){
console.log('someone entered the friends-chat');
socket.on('disconnect', function(){
console.log('user disconnected from friends-chat');
});
//recieving and emitting message to all clients in namespace /friends
socket.on('client message', function(msg){
console.log('message received: ' + msg);
io.of('/friends').emit('server_message', msg);
});
});
Clientside
var socket = io.connect();
//toggle namespace
$("#support_button").click(function(){
socket.disconnect();
socket = io('/support');
$('#messages').append($('<li>').text("You entered the Support-Chat"));
});
//toggle namespace
$("#friends_button").click(function(){
socket.disconnect();
socket = io('/friends');
$('#messages').append($('<li>').text("You entered the Friends-Chat"));
});
//sending message on submit
$('form').submit(function(){
socket.emit('client message', $('#m').val());
$('#m').val('');
return false;
});
//recieving message and display
socket.on('server_message', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
ich glaube, der Schalter selbst funktioniert, weil die Anschluss- und disconnect auslösenden Ereignisse sind, wie sie sollten. Aber wenn es darum geht, die Nachricht (der Server, der bereits vom Client empfangen wurde) an alle im selben Namespace zu senden, funktioniert es nicht.
Isnt dies der serversided Aufruf in einem bestimmten Namensraum emittiert ?:
io.of('namespace').emit();
Versteh ich die Verwendung von Namensräumen? Ich wollte Räume direkt nach dem Namespace-Split der 2 Maintchs für Support und Freunde implementieren. Oder habe ich die Namespaces auf der Serverseite falsch implementiert? Ich dachte, io.on (..), io.of ('/ support') am (..) und io.of ('/ friends') am (..) arbeiten alle gleich und fangen die Ereignisse ihrer eigenen Namespaces-Clients.
Jede Hilfe wird sehr geschätzt! Ich habe das Gefühl, dass Namespaces in den "Basic-Usage" Dokumentationen etwas vernachlässigt wurden.
Dies ist eine wunderbare Antwort und genau das, was ich wissen musste! Danke vielmals! – ExaMa