大佬,我感觉我现在比较认同你的理解,我司的 IM 基本就处于定制化和业务侵入比较严重的状态,基本导致他的能力基本不能复用。
同样历史团队中也开发过一个通用的长连接服务,包括 基于 netty 的接入层,以及维护用户和 entry ip 地址/群聊关系 缓存信息的 session层,也有上行和下行的消息分发层,例如上行的消息通过 MQ 发送,业务方自己处理后置的业务,包括落库等等,这套系统非常通用,他只关心单发和群发能力,业务协议数据也不会在这一层中关心,业务可以自己定义 IM 协议中包含的业务数据协议。
不过有一个疑惑点想请教一下,因为这个服务只负责处理连接、消息上下行推送等,没有任何业务,所以每一个业务接入都需要重新实现一套库表、逻辑,去处理联系人、历史消息这些数据吗,有同事提问过,有没有可能业务层也在这个通用的 IM 服务实现,而不需要每个业务方接入这个系统都要处理历史消息存储等问题。 或者说我们现有的一些三方产品,他们除了消息收发能力,肯定是有一定的存储能力的,是不是他们这种本身已经不够通用了。