我是否可以将socket.io客户端ID转换成略短的一个,而不会碰撞碰撞风险?

我可以将一个独特的string转换成稍短的string,而不会碰撞碰撞风险吗? 或者,如果没有,我可以以某种方式创build一个更短的新的唯一代码?

我正在使用socket.io,并且我想使用build立会话的客户端的套接字ID作为共享的代码,以便其他人join该会话,但是诸如Kf-uLxBxzB_8xwHgAAAC的代码不是'完全用户友好。 我希望人们能够键入代码,如果他们select,所以它需要尽可能短。

这种事情通常如何进行? 我使用Node.js和客户端JS。

风险解决scheme

连接时,您可以直接更改套接字的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 }); 

安全的解决scheme

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

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

简短的回答:不,你不能在没有碰撞风险的情况下缩短UID。

不过,从用户的angular度来思考这个问题。 复制和粘贴代码有什么困难? 它有多久并不重要,是吗?

另一种select是将会话UID映射到像heroku这样的语义UID,例如“blazing-mist-4652”。 请参阅下面的例子来说明如何生成这样的名字。

我怎样才能以编程方式生成类似Heroku的子域名?