【问题标题】:How to call function after sending msg to all room members?向所有房间成员发送消息后如何调用函数?
【发布时间】:2015-07-15 12:57:53
【问题描述】:

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

向所有客户端发送消息后如何调用循环?

【问题讨论】:

  • 我是 node 新手,您能指导如何将它与 socket 一起使用吗?

标签: javascript node.js socket.io


【解决方案1】:

如果broadcastemit 调用没有回调来知道它们何时完成,您可能只需要等待。如果他们没有告诉您何时完成,您必须猜测服务器需要多长时间。

类似:

socket.broadcast.to.emit() setTimeout( function(){ //for loop to remove from rooms }, 2000 );

【讨论】:

    【解决方案2】:

    使用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();
    

    【讨论】:

      【解决方案3】:

      这是对我有用的最终代码。在一个循环中,我发出了味精并让客户离开了房间

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

      【讨论】:

        猜你喜欢
        • 2022-08-21
        • 2023-03-27
        • 1970-01-01
        • 2014-09-18
        • 1970-01-01
        • 2019-02-15
        • 2021-01-04
        • 1970-01-01
        • 2019-03-12
        相关资源
        最近更新 更多