Socket.io返回值

时间:2015-09-07 22:37:25

标签: javascript node.js sockets chat

我有server.js

io.sockets.on('connection', function(socket){
     socket.on('duplicite', function(name){
      for(var i=0; i<clients.length; i++) {
        if(clients[i] == name){
          io.to(socket.id).emit('duplicite', true);
        }else{
          io.to(socket.id).emit('duplicite', false);
        }
      }
    });
});

和client.html

   socket.emit('duplicite', name);
   socket.on('duplicite', function(ret){
    if(ret){
     alert("non-OK");
    }else
    {alert("OK");}
   });

我想找到重复的东西。当第一个插座连接名称&#34; name&#34;一切都很好,我得到警告&#34; OK&#34;。但当第二个插座连接名称&#34;名称&#34;我得到警告&#34;不好&#34;和&#34;好的&#34;太。

1 个答案:

答案 0 :(得分:0)

尝试使用对象,使用方括号表示法检查现有名称更容易:

>>> [z[1] for z in sorted([(x[1], x) for x in a] + [(y[2], y) for y in b], key=operator.itemgetter(0))]
[['abc', 2, 'cde'], ['abc', 'lmn', 2], ['xyz', 5, 'fgh'], ['xyz', 'opq', 5]]

关于使用数组的原始代码,您应该在第一个if条件中放置/* could use {} but we'll use Object.create(null) to create a basic dictionary object, so we don't have to use hasOwnProperty() */ var clients = Object.create(null); io.sockets.on('connection', function(socket){ socket.on('duplicite', function(name){ if (!clients[name]) { socket.emit('duplicite', false); clients[name] = null; // no duplicate so put name onto object } else socket.emit('duplicite', true); }); }); ,因此它不会继续发送消息。