上一篇 用 Go 打造现代 IM 之底层逻辑
上一篇我们讲了,IM 的底层逻辑就是 发布 → 频道 → 订阅。
单聊怎么抽象成发布→频道→订阅的模式?
单聊频道 ID 技巧
聊天双方的用户 uid 通过 @拼接,hash 值小的拼在第一位 大的拼在 @后。
假设用户 A 的用户唯一 ID(uid)为 abc ( hash 值:1941671012 ) 用户 B 的用户唯一 ID(uid)为 kfm ( hash 值:3859239440 )
那么他们双方通讯的频道 ID: abc@kfm (因为 1941671012
频道成员
用户 abc 与 用户 kfm 聊天 其实就是在频道 ID 为 abc@kfm 的群内聊天
所以,abc@kfm 频道内的群成员为 用户 abc 和用户 kfm
目的
这样做的目的就是统一 IM 的底层逻辑,IM 底层就只有一条逻辑支线,那就是 发布 → 频道 → 订阅,也就是只有群聊,单聊也是群聊。
我们的开源 IM:
悟空 IM (通讯层): https://github.com/WuKongIM/WuKongIM
唐僧叨叨(业务层): https://github.com/TangSengDaoDao/TangSengDaoDaoServer