我想在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,但我想确保没有添加更多代码(更新对象)没有一种简单的方法可以有效地进行检查每次客户端连接时)。
答案 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);
}