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

标签 javascript websocket uniqueidentifier

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

逻辑是这样的:

  1. 当客户端连接到服务器时,它会收到一个 id uint16。
  2. ID 必须是唯一的,因此如果它获取到的 ID 会被使用 现有客户将被分配一个新客户。
  3. 当客户端离开 websocket 服务器时,ID 被回收并被 可供新客户使用。
  4. 任何时候并发客户端都不会超过 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。这对于日志记录特别方便,以便您始终可以确定特定连接发生了什么。此外,它在服务器之间是唯一的,因此如果您确实进行扩展,则不必担心冲突。

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

关于javascript - 为连接到 websocket 服务器的客户端生成唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148314/

相关文章:

Javascript/Node.js ] 使用 await 处理 promise 的错误

javascript - JSON.parse 不适用于有效的 json

javascript - 在函数 CoffeeScript 中获取对象值

javascript - NodeJS - 如何编写连接到 NodeJS 服务器并接收广播消息的客户端

拉拉维尔。每个用户的多个 channel 或个人 channel ?

ember.js - 隐藏模板中已删除的记录

android - 有没有一种方法可以不使用 onNewIntent 来获取 NFC UID?

javascript - 当访问者在页面之间移动时,如何使 toggleClass 更改持续存在?

javascript - 如何确定 CDK 添加到逻辑 ID 的随机字符数?

c++ - 基于枚举的模板是个好主意吗?