[英]Socket.io emit doesn't work but broadcast is fine
I'm trying to emit a notification to a single client but the emit does not seems to fire at all whereas broadcast.emit works fine. 我正在尝试向单个客户端发出通知,但是尽管broadcast.emit可以正常工作,但似乎根本不会触发该发出。 But the problem is broadcast is notifying all clients even if I supply the socket.id.
但是问题是即使我提供了socket.id,广播也会通知所有客户端。
Anyone have any idea what I did wrong? 有人知道我做错了什么吗?
var app = express( );
var querystring = require('querystring');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var clients = {};
io.sockets.on('connection', function( socket ) {
socket.on( 'subscribe', function( userID ) {
clients[userID] = socket.id;
});
socket.on( 'notifyMsg', function( data ) {
var obj = JSON.parse( data );
for( var i=0; i<obj.info.notifyUserIDs.length; i++ ) {
var to = clients[obj.info.notifyUserIDs[i]];
if( to ) {
// Doesn't work
io.sockets.socket(to).emit( 'notification', data );
// Works
//io.sockets.socket(to).broadcast.emit( 'notification', data );
}
}
});
});
What do you think about storing the sockets itself in the client hash and using it like this? 您如何将套接字本身存储在客户端哈希中并像这样使用呢?
var app = express( );
var querystring = require('querystring');
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var clients = {};
io.sockets.on('connection', function( socket ) {
socket.on( 'subscribe', function( userID ) {
clients[userID] = socket;
});
socket.on( 'notifyMsg', function( data ) {
var obj = JSON.parse( data );
for( var i=0; i<obj.info.notifyUserIDs.length; i++ ) {
var to = clients[obj.info.notifyUserIDs[i]];
if( to ) {
to.emit( 'notification', data );
}
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.