如何在基于套接字的 IM 中为 2 个用户生成唯一的频道名称?

How can I generate a unique channel name for 2 users in a socket based IM?

每对用户都需要一个唯一的字符串来表示他们的对话。每个用户都有一个唯一的id,所以我目前的计划是:

  1. 按字母顺序对用户 ID 进行排序 例如 userB, userA -> ['userA', 'userB']
  2. 然后用某个字符连接两个名字 例如'userA::userB'

似乎有点老套,我不完全相信这会产生唯一的字符串。无论哪种方式,我似乎都无法得出证明。

有推荐的方法吗?

我不认为这是 hacky。 2 个唯一键(用户名)的组合将形成第三个唯一键,明确连接两个用户。

这类似于数据库中的复合主键,它使用来自不同实体的两个 ID 来唯一键控它们之间的关系。

唯一一直困扰我的是弄乱连接字符是否会导致冲突。我认为这可以通过按字母顺序排列来避免,但是如果您有用户 "UserA:"、"UserA"、“:UserB” 和 "UserB",那么您可能会与 "UserA:::UserB" 发生冲突。为彻底避免这种情况,请确保使用不能出现在用户名中的字符连接。