-
Notifications
You must be signed in to change notification settings - Fork 2
Home
此服务的目标是为移动应用提供具有 高性能、高稳定性、高可用性、轻量及 的消息递送服务;
通过集成此服务,移动APP可以以最低的成本集成社交功能,包括“单聊”、“群聊”、
“发语音”、“发图片” 等基本的IM功能;
并且提供多种集成方式,可以与接入方的系统快速集成,并到完全解耦;
下文将对服务的通信协议加以描述。
结束符为 二进制数 00000001,即 byte 类型的 1,可以用字符串 "\01" 表示;
登录成功后,建议每隔 30~60 秒向服务器发送心跳请求,二进制数 00000010 表示心跳请求,一个正常的心跳包应当是字节数组byte[]{2,1},用字符串表示为 "\02\01",即 心跳请求+结束符;
服务器收到心跳请求后,会立刻作出应答,应答内容为 byte[]{2,1},用字符串表示为 "\02\01",即 心跳请求+结束符;
如果由于某种原因,服务端主动断开了客户端的连接,并且服务端给客户端返回了二进制数 00000011,则客户端应当放弃主动重连;此数字可以看成一个关闭信号,一个正常的退出信号应当是字节数组 byte[]{3,1},用字符串表示为 "\03\01";
消息由 “JSON字符串”+“结束符” 组成,具体实例见下文场景描述;
在序列化和反序列化消息时,要按照 UTF-8 编码格式进行 string -> binary 的转换;
每个用户登录服务器的身份标识,含义与结构参照XMPP协议的JID,即"userid@domain/resource";
消息类型用属性 type 来表示,值类型为 integer,0~99为系统保留值,接入的收发双方可以自定义此值,系统预留值含义如下
* type=0 打开session * type=1 普通聊天 * type=2 群聊 * type=3 状态同步 * type=4 系统消息随着系统的逐步完善,各种预定义类型会不断补充,每种预定义类型以及消息实例会在《消息实例与类型字典》中给出。
每条消息都是由一个 envelope 和 payload 组成,其中 envelope 表示信封,标识出消息的目的地以及类型,payload 的内容可以是简单的文本信息,也可以是结构化的 json,由收发双方自行定义与解析,服务器只负责按照信封的标注转发信息,具体示例如下:
{
"envelope":{
"id":"UUID,要求必须唯一"
"from":"发送人JID",
"to":"接收人JID",
"type":"int型,含义是 消息类型",
"ack":"int型,0 或空是不必响应,1 必须响应",
"ct":"13位时间戳,由服务器来补充此值",
"pwd":"只有当 type=0 时,即 opensession 时,才会使用此属性",
"gid":"群ID,只在 type=2 时会用到此属性"
},
"vsn":"消息版本(预留属性)",
"payload":{...}
}
其中 payload 属性为一个 key-value 对象,其中属性名由收发双方自行定义
假设 usera@test.com 要向 userb@test.com 发送消息 "hello world",则 usera@test.com 要发送如下消息:
{
"envelope":{
"id":"xxxx"
"from":"usera@test.com",
"to":"userb@test.com",
"type":1,
"ack":1
},
"vsn":"0.0.1",
"payload":"hello world"
}
- EMSG 社交全套解决方案
- QQ群: 541230692
- Simple: https://github.com/emsg