嗨,我想为连接到 websocket 服务器的每个客户端创建唯一的整数 id。
逻辑是这样的:
- 当客户端连接到服务器时,它会收到一个 id uint16。
- ID 必须是唯一的,因此如果它获取到的 ID 会被使用 现有客户将被分配一个新客户。
- 当客户端离开 websocket 服务器时,ID 被回收并被 可供新客户使用。
- 任何时候并发客户端都不会超过 1000 个,但新客户端可以随时连接。我的意思是 24/7 的任何第二秒。
我尝试过的:
let i = Date.now();
i &= 0xFFFF; // i will be the unique id.
通过这种方式,连接的客户端将获得一个 16 位整数 id。当它离开服务器时,有一些逻辑来回收它,也许将它放入缓存数组中。但由于有 65535 种可能性,我可能不需要使用该缓存数组。
我知道websocket连接一旦连接就会自动生成一个套接字id,但这超过20个字节,这不是我想要的。
警告:
此方法基于这样的假设:在任何给定时间(精度为毫秒)只有一个客户端尝试连接到 websocket 服务器。
如果两个或更多客户端尝试同时连接。这是行不通的。但我想这也取决于 cpu 时钟频率或者 websocket 服务器允许新客户端连接的频率。
最佳答案
放弃使用 uint16 并改用 UUID 的想法。 https://en.wikipedia.org/wiki/Universally_unique_identifier
这些算法专为这种确切类型的用例而设计。它们经过充分测试和标准化。
使用此方法,您不必重复使用 ID。这对于日志记录特别方便,以便您始终可以确定特定连接发生了什么。此外,它在服务器之间是唯一的,因此如果您确实进行扩展,则不必担心冲突。
关于javascript - 为连接到 websocket 服务器的客户端生成唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148314/