socket.emit事件仅用于当前用户不会触发

时间:2015-07-04 16:31:37

标签: node.js sockets socket.io emit

我正在使用 socket.io ,当我想从服务器向客户端仅为连接的用户发出一个事件时,它不起作用!

我没有错误或任何回复:(

这就是我的代码

// Server.js
var server     = require('http').createServer(),
    io         = require('socket.io')(server),
    logger     = require('winston'),
    port       = 1337;

// Logger config
logger.remove(logger.transports.Console);
logger.add(logger.transports.Console, { colorize: true, timestamp: true });
logger.info('SocketIO > listening on port ' + port);

io.on('connection', function (socket){
    logger.info('SocketIO > Connected socket ' + socket.id);

    socket.on('ElephantIO.login', function (user){
        socket.emit('SocketIO.login', user);
    });

    socket.on('disconnect', function () {
        logger.info('SocketIO > Disconnected socket ' + socket.id);
    });
});

server.listen(port);
// Client.js
(function() {
    var socket = io.connect('http://localhost:1337');

    socket.on('SocketIO.login', function(user) {
        console.log(user);
        alert('SocketIO.login');
    });

})();

如果我将socket.emit('SocketIO.login', user);更改为socket.broadcast.emit('SocketIO.login', user);以向所有其他关联用户发出此事件,则可以使用

如果我将socket.emit('SocketIO.login', user);更改为io.emit('SocketIO.login', user);以向所有已连接的用户发出此事件,我的行为与socket.broadcast.emit('SocketIO.login', user);

相同

当前用户窗口始终没有响应或错误!

1 个答案:

答案 0 :(得分:-1)

尝试使用Socket.io频道在用户连接时订阅用户,然后发送到该频道,直接转到该用户。

将套接字添加到频道:socket.join("channel-name");

要发送到该频道:io.sockets.in("channel-name").emit("signin",data);