消息格式
- 支持 ack、重发 消息序列 匿名登录 和 用户名密码登录,
- 支持发送 text、image、video、news、markdown
- 支持群聊:创建群、解散群、邀请加入群、加入群、退出群、屏蔽群、群发消息。
- 支持鉴权:在发送消息等相关操作中需要携带
token
。
消息格式
消息重发机制
- 消息序列号 (sequence):每个消息都有唯一的序列号,用于跟踪消息的发送和接收。
- 确认字段 (ack):用于确认收到特定序列号的消息。如果发送方在一定时间内未收到确认,则可以重发该消息。
支持匿名登录,用户名密码登录,token 登录
- 匿名登录:在登录请求中,将
anonymous
字段设置为true
,提供loginname
即可进行匿名登录。 - 用户名密码登录:提供
loginname
和password
字段进行验证。 - token:提供
token
字段进行验证。
通用消息结构
在消息结构中,增加 token
字段用于鉴权:
通用消息结构
所有的消息都遵循以下通用结构:
{
"cmd": "命令码",
"sequence": "消息序列号 (Long类型)",
"ack": "确认的消息序列号 (Long类型,可选)",
"from": "发送方ID",
"to": "接收方ID",
"token": "鉴权令牌 (String类型,可选)",
"createTime": "消息创建时间 (Long类型,utc时间戳)",
"body": {
// 根据cmd不同,body内容不同
}
}
- cmd:命令码,表示消息类型。
- sequence:消息序列号,用于消息的唯一标识和重发机制。
- ack:可选字段,用于确认收到特定序列号的消息。
- from 和 to:发送方和接收方的 ID。
- createTime:消息创建的时间戳,System.currentTimeMillis()。
- body:消息主体,根据不同的 cmd 类型而变化。
System.currentTimeMillis() 方法返回的是自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时) 起到当前时刻的毫秒数。这是一个绝对时间戳,表示的是统一的 UTC 时间,与系统的本地时区设置无关
1. 登录请求消息
命令码:COMMAND_LOGIN_REQ
(5)
{
"cmd": 5,
"sequence": 1234567894,
"from": "客户端ID",
"createTime": 1725338896811,
"body": {
"loginname": "用户名",
"password": "密码 (可选)",
"token": "校验码 (可选)",
"anonymous": true // 是否匿名登录,默认为false
}
}
2. 登录响应消息
命令码:COMMAND_LOGIN_RESP
(6)
{
"cmd": 6,
"sequence": 1234567895,
"ack": 1234567894,
"from": "服务器ID",
"to": "客户端ID",
"createTime": 1725338896911,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
3. 鉴权请求消息
命令码:COMMAND_AUTH_REQ
(3)
{
"cmd": 3,
"sequence": 1234567892,
"from": "客户端ID",
"createTime": 1725338896611,
"body": {
"token": "校验码"
}
}
4. 鉴权响应消息
命令码:COMMAND_AUTH_RESP
(4)
{
"cmd": 4,
"sequence": 1234567893,
"ack": 1234567892,
"from": "服务器ID",
"to": "客户端ID",
"createTime": 1725338896711,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
4. 聊天消息请求
命令码:COMMAND_CHAT_REQ
(11)
{
"cmd": 11,
"sequence": 1234567890,
"from": "发送方ID",
"to": "接收方ID",
"token": "鉴权令牌",
"createTime": 1725338896411,
"body": {
"msgType": "消息类型 (text、image、audio、video、news、markdown)",
"content": {
// 根据msgType不同,content结构不同
}
}
}
消息类型的数据结构
文本消息 (text)
"content": { "text": "文本内容" }
图片消息 (image)
"content": { "url": "图片URL", "width": 800, "height": 600, "format": "png" }
音频消息 (audio)
"content": { "url": "音频URL", "duration": 60, // 秒 "format": "mp4" }
视频消息 (video)
"content": { "url": "视频URL", "duration": 60, // 秒 "thumbnail": "缩略图URL", "format": "mp4" }
新闻消息 (news)
"content": { "title": "新闻标题", "description": "新闻描述", "url": "新闻链接", "image": "新闻图片URL" }
Markdown 消息 (markdown)
"content": { "markdown": "Markdown格式的文本" }
5. 聊天消息响应(确认)
命令码:COMMAND_CHAT_RESP
(12)
{
"cmd": 12,
"sequence": 1234567891,
"ack": 1234567890,
"from": "接收方ID",
"to": "发送方ID",
"createTime": 1725338896511,
"body": {
"status": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
- ack 确认的消息序列 id
7. 心跳请求消息
命令码:COMMAND_HEARTBEAT_REQ
(13)
{
"cmd": 13,
"sequence": 1234567896,
"from": "客户端ID/服务端Id",
"token": "鉴权令牌",
"createTime": 1725338897011,
"body": {
"hbbyte": "心跳内容"
}
}
8. 退出请求消息
命令码:COMMAND_CLOSE_REQ
(14)
{
"cmd": 14,
"sequence": 1234567897,
"from": "客户端ID",
"token": "鉴权令牌",
"createTime": 1725338897111
}
9. 获取用户信息请求消息
命令码:COMMAND_GET_USER_REQ
(17)
{
"cmd": 17,
"sequence": 1234567898,
"from": "客户端ID",
"token": "鉴权令牌",
"createTime": 1725338897211,
"body": {
"userId": "用户ID (type为0时必填)",
"groupId": "组Id (type为1时必填)",
"type": 0 // 0:指定用户,1:指定组用户,2:所有在线用户,3:所有用户
}
}
10. 获取用户信息响应消息
命令码:COMMAND_GET_USER_RESP
(18)
{
"cmd": 18,
"sequence": 1234567899,
"ack": 1234567898,
"from": "服务器ID",
"to": "客户端ID",
"createTime": 1725338897311,
"body": {
"users": [
{
"userId": "用户ID",
"username": "用户名",
"status": 1 // 0:离线,1:在线
}
// 更多用户信息
]
}
}
11. 创建群请求消息
命令码:COMMAND_CREATE_GROUP_REQ
(19)
{
"cmd": 19,
"sequence": 1234567900,
"from": "创建者ID",
"token": "鉴权令牌",
"createTime": 1725338897411,
"body": {
"groupName": "群名称",
"members": ["成员ID1", "成员ID2"], // 可选,初始成员列表
"description": "群描述"
}
}
12. 创建群响应消息
命令码:COMMAND_CREATE_GROUP_RESP
(20)
{
"cmd": 20,
"sequence": 1234567901,
"ack": 1234567900,
"from": "服务器ID",
"to": "创建者ID",
"createTime": 1725338897511,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息",
"groupId": "新创建的群ID"
}
}
13. 解散群请求消息
命令码:COMMAND_DISBAND_GROUP_REQ
(21)
{
"cmd": 21,
"sequence": 1234567902,
"from": "群主ID",
"token": "鉴权令牌",
"createTime": 1725338897611,
"body": {
"groupId": "群ID"
}
}
14. 解散群响应消息
命令码:COMMAND_DISBAND_GROUP_RESP
(22)
{
"cmd": 22,
"sequence": 1234567903,
"ack": 1234567902,
"from": "服务器ID",
"to": "群主ID",
"createTime": 1725338897711,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
15. 邀请加入群请求消息
命令码:COMMAND_INVITE_TO_GROUP_REQ
(23)
{
"cmd": 23,
"sequence": 1234567904,
"from": "邀请者ID",
"token": "鉴权令牌",
"createTime": 1725338897811,
"body": {
"groupId": "群ID",
"invitees": ["被邀请者ID1", "被邀请者ID2"]
}
}
16. 邀请加入群响应消息
命令码:COMMAND_INVITE_TO_GROUP_RESP
(24)
{
"cmd": 24,
"sequence": 1234567905,
"ack": 1234567904,
"from": "服务器ID",
"to": "邀请者ID",
"createTime": 1725338897911,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
17. 加入群请求消息
命令码:COMMAND_JOIN_GROUP_REQ
(25)
{
"cmd": 25,
"sequence": 1234567906,
"from": "申请者ID",
"token": "鉴权令牌",
"createTime": 1725338898011,
"body": {
"groupId": "群ID"
}
}
18. 加入群响应消息
命令码:COMMAND_JOIN_GROUP_RESP
(26)
{
"cmd": 26,
"sequence": 1234567907,
"ack": 1234567906,
"from": "服务器ID",
"to": "申请者ID",
"createTime": 1725338898111,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
19. 退出群请求消息
命令码:COMMAND_LEAVE_GROUP_REQ
(27)
{
"cmd": 27,
"sequence": 1234567908,
"from": "成员ID",
"token": "鉴权令牌",
"createTime": 1725338898211,
"body": {
"groupId": "群ID"
}
}
20. 退出群响应消息
命令码:COMMAND_LEAVE_GROUP_RESP
(28)
{
"cmd": 28,
"sequence": 1234567909,
"ack": 1234567908,
"from": "服务器ID",
"to": "成员ID",
"createTime": 1725338898311,
"body": {
"result": 1, // 1:成功, 其他:错误代码
"message": "描述信息"
}
}
21. 屏蔽群请求消息
命令码:COMMAND_MUTE_GROUP_REQ
(29)
{
"cmd": 29,
"sequence": 1234567910,
"from": "成员ID",
"token": "鉴权令牌",
"createTime": 1725338898411,
"body": {
"groupId": "群ID",
"mute": true // true:屏蔽, false:取消屏蔽
}
}
22. 屏蔽群响应消息
命令码:COMMAND_MUTE_GROUP_RESP
(30)
{
"cmd": 30,
"sequence": 1234567911,
"ack": 1234567910,
"from": "服务器ID",
"to": "成员ID",
"createTime": 1725338898511,
"body": {
"result": 1,
"message": "描述信息"
}
}
23. 群发消息请求
命令码:COMMAND_GROUP_MESSAGE_REQ
(31)
{
"cmd": 31,
"sequence": 1234567912,
"from": "发送方ID",
"groupId": "群ID",
"token": "鉴权令牌",
"createTime": 1725338898611,
"body": {
"msgType": "消息类型",
"content": {
// 与之前的消息类型相同
}
}
}
14. 群发消息响应
命令码:COMMAND_GROUP_MESSAGE_RESP
(32)
{
"cmd": 32,
"sequence": 1234567913,
"ack": 1234567912,
"from": "服务器ID",
"to": "发送方ID",
"createTime": 1725338898711,
"body": {
"status": 1,
"message": "描述信息"
}
}