为连接到websocket服务器的客户端生成唯一ID

时间:2017-05-24 03:13:12

标签: javascript websocket uniqueidentifier

您好我想为连接到websocket服务器的每个客户端创建唯一的整数id。

逻辑是这样的:

  1. 当客户端连接到服务器时,它会收到一个id UINT16。
  2. id必须是唯一的,因此如果它获得了使用的ID 由现有客户端将新客户分配给客户。
  3. 当客户端离开websocket服务器时,ID被回收并且是 准备好接待客户使用。
  4. 任何时候,并发客户端不会超过1000个,但新客户端可以随时连接。我的意思是任何时候24/7。
  5. 我尝试过:

    let i = Date.now();
    i &= 0xFFFF;    // i will be the unique id.
    

    通过这种方式,连接的客户端将获得16位整数id。当它离开服务器时有一些回收它的逻辑,可能把它放入一个缓存的数组中。但由于有65535种可能性,我可能不需要使用该缓存数组。

    我知道websocket连接会在连接后自动生成套接字ID,但这超过了20个字节,这不是我想要的。

    警告:

    此方法基于以下假设:在任何给定时间只有一个客户端尝试连接到websocket服务器(精度为毫秒)。

    如果两个或多个客户端尝试同时连接。这不起作用。但我想这也取决于cpu时钟速率或者websocket服务器允许新客户端连接的频率。

1 个答案:

答案 0 :(得分:2)

放弃使用uint16并切换到UUID的想法。 https://en.wikipedia.org/wiki/Universally_unique_identifier

这些算法专为此类用例而设计。它们经过了充分的测试和标准化。

使用此方法,您不必重新使用ID。这对于日志记录尤其方便,因此您始终可以确定特定连接发生的情况。此外,它在服务器上是独一无二的,因此如果您进行扩展,则无需担心冲突。

https://www.npmjs.com/package/uuid