我可以将socket.io客户端id转换为稍短的id而不会遇到碰撞风险吗

Can I convert the socket.io client id into a slightly shorter one without running into collision risks?

本文关键字:id 遇到 碰撞 io socket 客户端 转换 我可以      更新时间:2023-09-26

我可以将一个唯一的字符串转换为稍短的字符串而不会遇到碰撞风险吗?或者,如果没有,我能以某种方式创建一个更短的新的唯一代码吗?

我使用的是socket.io,我想使用设置会话的客户端的socket id作为要共享的代码,以便其他人加入该会话,但是像Kf-uLxBxzB_8xwHgAAAC这样的代码对用户并不完全友好。我希望人们能够键入代码,如果他们选择的话,所以它需要尽可能短。

这种事情通常是怎么做的?我使用的是Node.js和客户端js。

风险解决方案

当套接字连接时,您可以直接更改它们的id:

socket  = io.connect('http://localhost');
socket.on('connect', function() {
    console.log(socket.io.engine.id);     // old ID
    socket.io.engine.id = 'new ID';
    console.log(socket.io.engine.id);     // new ID
});

安全解决方案

或者,您可以简单地将套接字保存在服务器端的对象中:

socket  = io.connect('http://localhost');
    var clients = {};
    socket.on('connect', function() {
        clients[customId] = socket.id;
    });

    var lookup = clients[customId];

简短的回答:不,如果不遇到碰撞风险,就无法缩短UID。

但是,请从用户的角度考虑这一点。复制和粘贴代码有什么困难?它有多长其实并不重要,是吗?

另一种选择是将会话UID映射到像heroku所具有的语义UID,例如"blazing-list-4652"。请参阅下面的示例,了解如何生成这样的名称。

如何以编程方式生成类似Heroku的子域名称?