socket.io只发送数据包给发送者

我还没有弄清楚如何直接使用socket.io来响应发件人

我已经了解到,io.sockets.emit发送给所有的客户,但我不会把信息发回给发件人。

码:

socket.on('login', function (data) { db.users.find({username: cc.lowerCase(data.username)}, function(err, users) { if (users.length > 0) { users.forEach( function(user) { console.log(user.length); if (user.password == data.password) { io.sockets.emit('login', { username: user.username }); } else { io.sockets.emit('error', { message: "Wrong username or password!" }); } }); } else { io.sockets.emit('error', { message: "Wrong username or password!" }); } }); }); 

当您的服务器侦听时,您通常会在“连接”事件中获取一个套接字:

 require('socket.io').on('connect', function(socket){ 

套接字连接2点:客户端和服务器。 当你在这个socket上发射时,你发射到这个特定的客户端。

例如:

 var io = require('socket.io'); io.on('connect', function(socket){ socket.on('A', function(something){ // we just received a message // let's respond to *that* client : socket.emit('B', somethingElse); }); }); 

要小心,这是两个不同的电话:

  • socket.emit :只发送到一个套接字
  • io.sockets.emit :发射到所有套接字

简单的例子

socketio中的语法令人困惑。 此外,每个套接字自动连接到他们自己的房间与id socket.id (这是如何私人聊天工作在socketio,他们使用的房间)。

发送给发件人和其他人

 socket.emit('hello', msg); 

发送给每个人, 包括发件人(如果发件人在房间里)在房间“我的房间”

 io.to('my room').emit('hello', msg); 

发送给除了发件人(如果发件人在房间里)在房间“我的房间”

 socket.broadcast.to('my room').emit('hello', msg); 

发送给每个房间的每个人, 包括发件人

 io.emit('hello', msg); // short version io.sockets.emit('hello', msg); 

只发送到特定的套接字(私人聊天)

 socket.broadcast.to(otherSocket.id).emit('hello', msg); 

晚但比从未好;)

我有这样的行为:

 io.on('connection', function(socket){ socket.emit('some event', data); socket.on('private event', function(message){ this.emit('other private event', message); } } 

经过一些testing后,我意识到'private event'closures中的'this.emit'只能发送给发件人。 所以我尝试了'this.broadcast.emit',它将消息发送给除发送者之外的所有连接。 我相信这是你想要的代码。