socket.io仅向发送方发送数据包

时间:2014-06-07 18:11:32

标签: node.js 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!" });
      }
    });
});

2 个答案:

答案 0 :(得分:40)

当您的服务器侦听时,您通常会在"连接"处获得套接字。事件:

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

套接字连接2个点:客户端和服务器。当您在此套接字上发出时,您将向此特定客户端发出。

示例:

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:向所有套接字发出

答案 1 :(得分:0)

迟到但总比没有好;)

我有这样的感觉:

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

经过一些测试后,我意识到“这就是”。内部'私人活动'封闭仅发送给发件人。所以我尝试了这个.broadcast.emit',它将消息发送给除发件人之外的所有连接。我相信这是你想要的代码。