我可以简单有效地检查是否采用了Socket.io客户端ID吗?

时间:2015-12-14 21:23:26

标签: javascript socket.io

我想在Socket.io中使用客户端ID作为用户通过输入来连接彼此会话的代码。创建者的套接字ID成为会话代码。

所以我想将id更改为更短的随机字符串,我现在知道如何做到这一点,但我需要检查我的随机字符串,以确保它不是另一个连接的客户端ID的副本。

是的,我可以做这样的事情(未经测试):

function generate(){
    var randomStr = generateRandom(6);
    var clients = io.sockets.clients();
    var unique = true;
    for (client in clients) {
        if (clients.hasOwnProperty(client) {
           if (randomStr == client.id) unique = false;
        }
    }
    if (unique) client.id = randomStr;
    else generate();
}

但是这需要一个循环,当我检查一个对象属性时,我不会理解JavaScript在内部的方式利用哈希表,这将消除所有客户端的循环:

function generate(){
    var randomStr = generateRandom(6);
    var clients = io.sockets.clients();
    if (!clients[randomStr]) client.id = randomStr;
    else generate();
}

有没有办法以类似的方式有效地检查客户端的现有ID?

我可以将ID添加到对象中,因为我在连接时转换了客户端ID,但我想确保没有添加更多代码(更新对象)没有一种简单的方法可以有效地进行检查每次客户端连接时)。

1 个答案:

答案 0 :(得分:0)

在socketio≥1.0中,您可以使用io.sockets.connected[socketid]。您可以使用它来更新生成函数。

function generate(client_to_update){
    var randomStr = generateRandom(6);
    var client = io.sockets.connected[randomStr];
    if (!client) client_to_update.id = randomStr;
    else generate(client_to_update);
}