halo私聊概要设计

一、系统架构

  • goim:长连接系统,实现了单播、多播、广播功能
  • imService:聊天服务器,处理私聊消息
  • redis:用于订阅、发布用户上下线消息,存储用户已同步的最大消息id
  • mysql:存储私聊消息,作为收信箱和发信箱

二、实现方式

2.1 设计目标

2.2 在线消息

2.3 离线消息

2.4 消息确认

三、数据模型

 CREATE TABLE `hl_single_chat` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `msg_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '消息id',
  `from` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '消息接收者',
  `to` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '消息发送者',
  `msg` json  COMMENT '聊天消息',
  `msg_type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '消息内容 0 表示文本消息 1 表示 图片',
  `deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '是否删除 0 正常 1已删除',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  KEY `to` (`to`)
) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=utf8 COMMENT='私聊收信箱';

四、接口设计

4.1 接口说明

序号接口说明备注
1sendMsg发送消息http协议,给用户发送点对点普通消息,包括文本,图片,语音,视频,地理位置和自定义消息。
2ack消息确认http协议,客户端确认已收到最msgId,若收到的消息不连续,发送已同步的最大msgId到服务器,服务器重新下发
3push下发消息单播消息,pb协议

4.2 发送消息接口

4.2.1 请求参数

参数名称参数类型示例备注
fromlong接收消息的用户uid
tolong发送消息的用户uid
msgTypeint0 表示文本消息 1 表示图片
bodystring最大长度5000字符,JSON格式。见消息格式示例
消息格式示例
1.文本消息
{
  "msg":"哈哈哈"//消息内容
}
2.图片消息(type = 1)
{
  "name":"图片发送于2015-05-07 13:59",   //图片name
  "md5":"9894907e4ad9de4678091277509361f7",    //图片文件md5
  "url":"http://nimtest.nos.netease.com/cbc500e8-e19c-4b0f-834b-c32d4dc1075e",    //生成的url
              "ext":"jpg",    //图片后缀
  "w":6814,    //宽
  "h":2332,    //高
  "size":388245    //图片大小
}

4.2.2 响应参数

参数名称参数类型示例备注
msgIdlong消息id

4.3 消息确认

4.3.1 请求参数

参数名称参数类型示例备注
uidlong用户uid
msgIdlong已收到的最大消息id

4.4 下发消息

// 公屏消息
message SingleChatMsg{
    string msg = 1;     //消息内容
}

(完)

https://juejin.im/post/5e3449faf265da3e0c4c7fe5

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论