Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io emit不工作,但广播正常_Javascript_Socket.io - Fatal编程技术网

Javascript Socket.io emit不工作,但广播正常

Javascript Socket.io emit不工作,但广播正常,javascript,socket.io,Javascript,Socket.io,我正在尝试向单个客户端发出通知,但emit似乎根本没有启动,而broadcast.emit工作正常。但问题是广播正在通知所有客户端,即使我提供了socket.id 有人知道我做错了什么吗 var app = express( ); var querystring = require('querystring'); var server = http.createServer(app); var io = require('socket.io').listen(server); var clie

我正在尝试向单个客户端发出通知,但emit似乎根本没有启动,而broadcast.emit工作正常。但问题是广播正在通知所有客户端,即使我提供了socket.id

有人知道我做错了什么吗

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 );
            }
        }
    });
});

您如何看待将套接字本身存储在客户机散列中并像这样使用它

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 );
            }
        }
    });
});

嗨,我也试过了,但发射根本就不点火。我还尝试console.logto并获取对象输出{id:'BErkIOeBJP2lsU2OMJxn',命名空间:{manager:{server:[object],命名空间:[object],套接字:[Circular],_事件:[object],设置:[object],握手:[object],连接:[object],打开:[object],已关闭:{},文件室:[Object],文件室客户端:[Object],旧侦听器:[Object],序列号:1714461803,gc:[Object]},这对我来说很好。你能嗅探有线通讯吗?我的意思是,这个套接字看起来很好,所以它可能会发送一些东西到某个地方。对不起,如何嗅探有线通讯?你可以在你这边测试它吗?我的客户端只是一个套接字。在“通知”中,函数res{console.logbrowser=+res};我的意思是在服务器端。以ngrep为例。遗憾的是,我在这里使用的是windows: