4. 用 Go 打造现代 IM 之单聊频道 ID 技巧

216 天前
 wkong

4. 用 Go 打造现代 IM 之单聊频道 ID 技巧

上一篇 用 Go 打造现代 IM 之底层逻辑

上一篇我们讲了,IM 的底层逻辑就是 发布 → 频道 → 订阅。

单聊怎么抽象成发布→频道→订阅的模式?

单聊频道 ID 技巧

聊天双方的用户 uid 通过 @拼接,hash 值小的拼在第一位 大的拼在 @后。

假设用户 A 的用户唯一 ID(uid)为 abc ( hash 值:1941671012 ) 用户 B 的用户唯一 ID(uid)为 kfm ( hash 值:3859239440 )

那么他们双方通讯的频道 ID: abc@kfm (因为 1941671012 < 3859239440 )

频道成员

用户 abc 与 用户 kfm 聊天 其实就是在频道 ID 为 abc@kfm 的群内聊天

所以,abc@kfm 频道内的群成员为 用户 abc 和用户 kfm

目的

这样做的目的就是统一 IM 的底层逻辑,IM 底层就只有一条逻辑支线,那就是 发布 → 频道 → 订阅,也就是只有群聊,单聊也是群聊。

我们的开源 IM:

悟空 IM (通讯层): https://github.com/WuKongIM/WuKongIM

唐僧叨叨(业务层): https://github.com/TangSengDaoDao/TangSengDaoDaoServer

1927 次点击
所在节点    程序员
9 条回复
electronic
216 天前
看起来不错啊,支持一下
wkong
216 天前
@electronic 感谢
asta2
216 天前
就是聊天室 ID ,聊天室这东西我五年前就写过
kkk9
216 天前
本来挺感兴趣的,点进 Github 看简介下面的官网域名,直接 pass 。产品是没名字吗,硬要蹭 github 的品牌名。😓
wkong
216 天前
@kkk9 喷的角度很刁钻😂
Dongli888
215 天前
支持一下

正好我有 2 个域名
GO.SB
IM.AR
2 个域名出售
moonrailgun
215 天前
我的是重新计算一个会话 id 的,因为如果会话突然想加人的话就会很尴尬,重新计算的话可以把双人会话与多人会话的模式进行同构。减少不必要的分叉

https://tailchat.msgbyte.com/
zmaplex
215 天前
mqtt
kkk9
215 天前
@wkong #5 算不上喷,只是个人看不惯。好好的国人产品,蹭别人的厂牌,多么不自信。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/979150

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX