Node.js socket.emit事件仅适用于当前用户';t火

Node.js socket.emit事件仅适用于当前用户';t火,node.js,sockets,socket.io,emit,Node.js,Sockets,Socket.io,Emit,我使用的是socket.io,当我只想为连接的用户从服务器向客户端发出事件时,它不起作用 我没有错误或任何响应:( 这是我的密码 //Server.js var server=require('http')。createServer(), io=require('socket.io')(服务器), 记录器=需要('winston'), 端口=1337; //记录器配置 记录器。移除(记录器。运输。控制台); add(logger.transports.Console,{colorize:true

我使用的是socket.io,当我只想为连接的用户从服务器向客户端发出事件时,它不起作用

我没有错误或任何响应:(

这是我的密码

//Server.js
var server=require('http')。createServer(),
io=require('socket.io')(服务器),
记录器=需要('winston'),
端口=1337;
//记录器配置
记录器。移除(记录器。运输。控制台);
add(logger.transports.Console,{colorize:true,timestamp:true});
logger.info('SocketIO>监听端口'+端口);
io.on('连接',函数(套接字){
logger.info('SocketIO>Connected socket'+socket.id);
socket.on('ElephantIO.login',函数(用户){
emit('SocketIO.login',user);
});
socket.on('disconnect',function(){
logger.info('SocketIO>Disconnected socket'+socket.id);
});
});
监听(端口);
//Client.js
(功能(){
var socket=io.connect('http://localhost:1337');
socket.on('SocketIO.login',函数(用户){
console.log(用户);
警报('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);


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

尝试在用户连接时使用Socket.io频道向其订阅,然后发送到该频道,仅发送到该用户

要将套接字添加到频道,请执行以下操作:
socket.join(“频道名称”);


发送到该通道:
io.sockets.in(“通道名称”).emit(“登录”,数据);

如果你要否决我的答案,请告诉我你为什么要否决。使用聊天室是一个很好的功能,但似乎与OP的问题无关。你可以不使用聊天室就向单个用户发送消息。请解释OP的问题是什么以及为什么这会解决它。OP说他希望向单个用户发送消息。使用通道允许OP在套接字的整个生命周期内执行一次或多次此操作,而无需为客户端连接保留对套接字变量的引用。OP说向套接字发出的消息不起作用,因此我建议一种解决方法,允许他使用t将来会再次使用相同的套接字连接。因此,您应该为每个单独的套接字创建一个新的聊天室名称,并以某种方式记住每个单独的套接字的单独聊天室名称?当有许多不同的套接字连接时,这是不实际的,因为您可以只使用
套接字et
变量您已经有了。如果是
socket.emit()
不起作用,实现中存在一些根本性的错误,应该加以诊断和修复,而这正是一个合适的答案应该解决的问题。我的意思是,将频道命名为用户唯一ID也可以起作用。我的观点是,我的答案没有问题,没有理由否决pe这是一个完全可以接受的答案,因为它并不完全是你应该怎么做的。事实上,你还没有提供自己的解决方案。简单地看一下,发布的代码中似乎没有错误。我的想法是,实际代码中可能有错误,因为这段代码看起来被截断了一点。另外,是哪个版本的套接字您使用的是.io?您在代码中的什么地方发送初始消息?我只看到客户端和服务器都在侦听消息,而不是任何人在发送消息。我使用的是1.3.5版本的socket.io。@jfriend00发出我使用的ElephantIO.login事件,这是.P.s的链接:它与socket一起工作。您能解释一下吗ElephantIO在这里做什么以及它在您的代码中扮演什么角色?当我跟踪您指向ElephantIO的链接时,我发现的只是一个PHP webSocket库,它在这里似乎不相关,所以我感到困惑。显然,您有一个socket.io socket对象,它的行为不正常,所以我试图找出原因。