分类: Java开发

聊天消息中心 MCenter 基本概念整理

基本理念

聊天系统里每个实体(用户、群组等)都需要有一个全局唯一的地址,一个合法的地址可以由名称和所在节点组成,格式如 name@node 这种结构。

  • 结点主要用于标识地址所在服务器,可能包含:
    • 用户结点,为每个用户维护一个消息接收队列
    • 群组结点,按群成员,将群信息路由到用户结点
    • 机器人节点,接收机器人信息,执行对应逻辑
    • 第三方结点,执行外部对接等操作
    • 等等其它结点
  • 名称标识该地址在服务器上的具体个体。

安全

为每次登录创建会话对应的 aesKey,将传给外部的地址标识符做 AES 加密后返回,这样可以从杜绝用户遍历地址表导致的乱发消息。

底级接口

面向底层,相互不交叉,便于替换底层,随时进行数据源切换等

  • 用户信息增删改查
  • 群组信息增删改查
  • 历史消息列表增删改查
  • 通讯录增删改查
  • 消息内容的存储,考虑效率及系统容量,相同内容的聊天消息尝试保存一条
  • 商家、群组、第三方、机器人 等结点任务处理
  • 实时消息路由及消息订阅

中级接口

面向业务,相互交差,例如接收或者发送消息同步更新最近联系人,提供给各内部应用的接口层

  • 拉取最近联系人
  • 按结点拉取历史聊天数据
  • 拉群,群转交,群踢人等
  • 发送各种类型的消息
  • 查询修改用户头像昵称备注等信息
  • 消息回执转发

高级接口

在二级接口的基础上添加会话过程,添加原始数据隐藏,直接提供给各种外部接入方

  • 加密所有结点信息
  • 实现聊天 session
  • 通用评论组件
  • 各种快捷回复
  • 机器人组件

Recent Posts

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

2 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

3 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

3 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

3 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

4 年 之前