向所有房间成员发送消息后如何调用函数?
How to call function after sending msg to all room members?
在socket.io服务器端。在向他们发送消息后,我想从房间中删除所有用户。但在消息发送给所有用户之前,他们会被从房间中移除
socket.broadcast.to('myFavRoom').emit('good_bye_friends', {'reason':'server is loaded'});
for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
if (io.sockets.connected[socketID]) {
io.sockets.connected[socketID].leave('myFavRoom');
}
}
如何在向所有客户端发送消息后调用循环?
如果 broadcast
和 emit
调用没有回调来知道它们何时完成,您可能只需要等待。如果他们在完成时不告诉您,您必须猜测服务器需要多长时间。
类似于:
socket.broadcast.to.emit()
setTimeout( function(){
//for loop to remove from rooms
}, 2000 );
使用 Q 库 https://github.com/kriskowal/q:
注意:我真的从未使用过它,也不知道它是如何工作的,但我认为它可能是这样的:
Q.fcall(function() {
socket.broadcast.to('myFavRoom').emit('good_bye_friends', {'reason':'server is loaded'});
})
.then(function() {
for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
if (io.sockets.connected[socketID]) {
io.sockets.connected[socketID].leave('myFavRoom');
}
}
})
.catch(function (error) {
// Handle any error from all above steps
})
.done();
这是对我有用的最终代码。在一个循环中,我发出了味精并让客户离开房间
for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
clientSocket = io.sockets.connected[socketID];
if (clientSocket) {
clientSocket.emit('good_bye_friends', {'reason':'server is loaded'});
clientSocket.leave('myFavRoom');
}
}
在socket.io服务器端。在向他们发送消息后,我想从房间中删除所有用户。但在消息发送给所有用户之前,他们会被从房间中移除
socket.broadcast.to('myFavRoom').emit('good_bye_friends', {'reason':'server is loaded'});
for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
if (io.sockets.connected[socketID]) {
io.sockets.connected[socketID].leave('myFavRoom');
}
}
如何在向所有客户端发送消息后调用循环?
如果 broadcast
和 emit
调用没有回调来知道它们何时完成,您可能只需要等待。如果他们在完成时不告诉您,您必须猜测服务器需要多长时间。
类似于:
socket.broadcast.to.emit()
setTimeout( function(){
//for loop to remove from rooms
}, 2000 );
使用 Q 库 https://github.com/kriskowal/q:
注意:我真的从未使用过它,也不知道它是如何工作的,但我认为它可能是这样的:
Q.fcall(function() {
socket.broadcast.to('myFavRoom').emit('good_bye_friends', {'reason':'server is loaded'});
})
.then(function() {
for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
if (io.sockets.connected[socketID]) {
io.sockets.connected[socketID].leave('myFavRoom');
}
}
})
.catch(function (error) {
// Handle any error from all above steps
})
.done();
这是对我有用的最终代码。在一个循环中,我发出了味精并让客户离开房间
for (socketID in io.nsps['/'].adapter.rooms['myFavRoom']) {
clientSocket = io.sockets.connected[socketID];
if (clientSocket) {
clientSocket.emit('good_bye_friends', {'reason':'server is loaded'});
clientSocket.leave('myFavRoom');
}
}