N-chat
N-chat copied to clipboard
兼容其他版本socket io
^ ^ 非常感谢提供源码和详细教程~
关于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"已经通过。
有空请看看吧~谢谢~
我也遇到这个问题,我用的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);
}
});
stackoverflow上取到的是个对象并不是数组- -
@phobal It works. While Getting Object.entries is not a function
var entries = require('object.entries')
var clients = entries(io.sockets.sockets);
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);
}
}