N-chat icon indicating copy to clipboard operation
N-chat copied to clipboard

兼容其他版本socket io

Open hnaoto opened this issue 9 years ago • 4 comments

^ ^ 非常感谢提供源码和详细教程~

关于0.9以后的socket io没有clients()方法, 私聊会报错, 详见这里: https://github.com/nswbmw/N-chat/issues/3 stackoverflow上有各种解决方法,http://stackoverflow.com/questions/6563885/socket-io-how-do-i-get-a-list-of-connected-sockets-clients?answertab=active#tab-to 我个人采取了其中一种, 测试"socket.io": "^1.3.7"已经通过。

有空请看看吧~谢谢~

hnaoto avatar Jan 15 '16 04:01 hnaoto

我也遇到这个问题,我用的socket版本是1.5.1,按照stackoverflow上的做法还是不对,最后用下面的方式可以解决问题:

  var clients = Object.entries(io.sockets.sockets);
      //遍历找到该用户
      clients.forEach(function(client) {
        if (client[1].name == data.to) {
          //触发该用户客户端的 say 事件
          client[1].emit('say', data);
        }
      });

phobal avatar Nov 07 '16 14:11 phobal

stackoverflow上取到的是个对象并不是数组- -

johnsoncheg avatar Feb 27 '17 10:02 johnsoncheg

@phobal It works. While Getting Object.entries is not a function

var entries = require('object.entries')
var clients = entries(io.sockets.sockets);

lynndotconfig avatar Mar 09 '17 10:03 lynndotconfig

my problem is that " clients.forEach is not a function " ,the version of socket.io is v2.0.3, because var clients = io.sockets.sockets; got an Object but a Array , so using "for key in " search for the user is right way;

        var clients = io.sockets.sockets;
        //遍历找到该用户
        for(var k in clients){
          if(clients[k].name == data.to){
              clients[k].emit("say",data);
          }
        }

wuhao5436 avatar Sep 13 '17 02:09 wuhao5436