简体   繁体   English

Socket.io发射不起作用,但广播可以

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM