我如何获得其他用户socket.id?
我如何获得其他用户的socket.id?
由于socket.id不断更新,每当浏览器刷新或断开,然后再次连接。
例如这行代码将解决我的问题
socket.broadcast.to(id).emit('my message', msg);
但问题是我如何得到该ID?
比方说,杰克想要给约拿发信息
杰克将使用上面的代码发送消息,但如何获得约拿的套接字ID?
为了logging,我已经实现了socket.io
和passport
库,以便我可以在socket.io
使用session,库调用passport-socket.io
。 所以得到socket.io中的用户ID将是
socket.request.user._id
我所做的是维护一个数据库模型(我使用mongoose)包含userId和socketId的连接用户。 你甚至可以用全局数组来做到这一点。 从套接字连接的客户端,与userId一起发出一个事件
socket.on('connect', function() { socket.emit('connected', userName); //userName is unique })
在服务器端,
var Connect = require('mongoose').model('connect');; /* connect is mongoose model i used to store currently connected users info*/ socket.on('connected', function(user) { // add user data on connection var c=new Connect({ socketId : socket.id, client : user }) c.save(function (err, data) { if (err) console.log(err); }); }) socket.on('disconnect', function() { //remove user data from model when a socket disconnects Connect.findOne({socketId : socket.id}).remove().exec(); })
这种方式总是有连接的用户信息(当前使用的socketId)存储。 每当你需要得到一个用户当前的socketId获取它
Connect.findOne({client : userNameOfUserToFind}).exec(function(err,res) { if(res!=null) io.to(res.socketId).emit('my message', msg); })
我在这里使用mongoose,但你甚至可以在这里使用一个数组,并使用filter从数组中获取用户的socketId。
文档build议`socket.on(SOME_MESSAGE的callback提供了一个id作为拳头参数。
http://socket.io/docs/rooms-and-namespaces/#default-room
javascript io.on('connection', function(socket){ socket.on('say to someone', function(id, msg){ socket.broadcast.to(id).emit('my message', msg); }); });