此外,我正在创建rom" / other_room"用:
io.of('/other_room');
然后我做了:
socket.on('MessageFromClient_Change_Of_ROOM', function(msj){
// yes!, I validate var msj == '/other_room'
console.log('before: ' + socket.nsp['name']);
socket.join(msj);
console.log('after: ' + socket.nsp['name']);
}
但永远我的控制台打印:
before: /
after: /
为什么这个插座永远不会改为" / other_room" ???
由于
版/ ADDITION:
这是我的代码:
var io = require('socket.io').listen(6969);
io.sockets.on('connection', function(socket){
clientes ++;
server.sockets.emit('eventCONEX', clientes);
// here my lines of code with "events" ...
// then ALL "new connection" by default go into '/'...
// then all "new connection" have assigned the namespace "/"
});
请:我如何从"这个默认值传输/移动用户[/]"到"个性化" ??
我有一大堆客户:A,B,C,E,...,Z
然后我用的时候:
io.sockets.emit('My Event', the_info);
远程客户端中的窗口浏览器,显示" the_info"连接到" /"的所有客户或默认情况下为socket / room / namespace。
我需要用户可以创建" Room_created_by_A"或" Room_created_by_B" ...
我相信指示:
socket.join(new_name);
方法是正确的,但现在我明白不是正确的。
然后,当客户端发送消息" create_new_room"时,我会运行这些行:
function list_of_rooms(){
s = '';
for(S in server.nsps)s += S + '\n';
return s;
}
server.of(msj);
server.of(socket.nsp['name']).emit('F5_rooms', list_of_rooms());
我尝试新解释:
当客户A创建"房间" [thecnology]然后我的代码/程序运行更新" list_of_rooms()"然后一些客户作为F,G,H可以转到房间[thecnology]。
然后因为组{A,F,G,H}进入房间[thecnology],如果他们仅发送消息,则组{A,F,G,H}收到消息,因为消息或&#34 ;多播"只对客户进入[thecnology]。
我相信这个消息/多播是可能的:
server.of(socket.nsp['name']).emit('new_message_to_this_group', message);
新的,感谢帮助; (我相信也许没有被授权说谢谢)
答案 0 :(得分:0)
您将名称空间与房间完全混淆了。它们是两个完全不同的东西,使用房间,你不需要对名称空间做任何事情。要将客户端套接字放入房间,可以使用该特定客户端套接字在服务器上执行此操作:
socket.join("someRoom");
然后,要从服务器向该房间中的每个人发送消息,请执行以下操作:
io.in("someRoom").emit("msg", "Hello to all");
如果您想使用MessageFromClient_Change_Of_ROOM
消息加入会议室,可以这样做:
io.on('connection', function(socket) {
socket.on('MessageFromClient_Change_Of_ROOM', function(msj){
// assumes client is only supposed to be in one room
// and keeps track of prior room in socket.priorRoom
if (socket.priorRoom) {
// leave previous room
socket.leave(socket.priorRoom);
}
// join new room
socket.join(msj);
socket.priorRoom = msj;
});
});