Terry-Mao / goim

goim

Home Page:https://goim.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

发送消息设计问题

heipacker opened this issue · comments

现在goim是第一次认证连接就需要指定连接哪个房间,这个不应该放在一起, 应该连接就只是一个单纯的连接,至于是不是要进入到哪个房间应该通过一个消息来说明, 比如进入房间的消息,退出房间的消息,这样就可以任意切换, 我想这个应该跟qq是一样的吧, 不然qq你一打开就进入到哪里?

commented

其实我的理解是 goim 里的这个room 是类似直播房间里发弹幕那种,进入到某房间才会去建立一个针对于这个房间的连接。

而如果要实现具体的IM那种群组的话,估计goim的想法是让我们自己去维护群组表,存储有哪些UID之类的,最后通过调用其logic里的一个消息发送到多uid方法去实现群组功能。

其实建立连接跟房间可以没关系的, 如果这样设计那就是每进入一个房间就建立一个新连接那 新建,断开这样会频繁很多,进入房间完全可以通过一个消息类型来解决,这样用户每次新进入房间都是建立在一条连接山

这个确实是早期协议涉及的一些缺陷,我们内部也在做优化,主要是业务场景当时没有多房间需求,有几种改法:
1、comet维护,连接归属哪些个room,每次更换房间,发一个指令切换房间;
2、更通用是在router维护这个关系,comet纯连接,这样好处是,业务解耦

关于room其实有两种设计的:
1、网关room,比如直播方式的房间可能达到百万人在线,这种合适使用room广播消息是最节省的;
2、业务room,实现类似qq和wechat那种,后端存储维护room用户关系信息,按用户维度推送,合适大概限制500人左右,存在放大推送问题;