调用时序图如下:
源码:https://github.com/Aresyi/pushServer
- 获取socket登录秘钥(登录口令):key. key的时效为1分钟,如果客户端在拿到key后,1分钟之内不执行socket登录验证的流程,则key自动生效;接口服务地址:/user/getPushKey
- 客户端拿到key后,与服务器端建立socket连接,并立即发送key到服务器。如果key过期,则服务器会执行下列操作:
- 向客户端发送一个字符:大写的X,
- 发送成功后,关闭socket连接;
- 发送key的格式如下:用户ID=密钥,如123=abcdef, 如果key不正确,则服务器端会直接关闭连接,不向客户端返回任何内容;
- key验证成功后,服务器会立即返回初次心跳消息;初次心跳消息的格式如下:
A:{“Result”:{“sysNotifyCount”:1,”applyCount”:106,”messageCount”:0,”commentCount”:0,”praiseCount”:0,”sysCastCount”:[]}}
注:(与V1.210及以前的版本的消息格式相同) 4. 心跳:
- 服务器端会每隔一段指定的时间(5分钟)向客户端发送一个心跳消息,用于判断客户端是否在线;
- 服务器发送的心跳消息的内容为:”\r\n”,客户端收到心跳后,也同样向服务器端返回字符“1”
- 服务器端返回的心跳包的内容格式如下:C:jsonStr.其中,jsonStr的内容与A:{…}中,”sysCastCount”:[]中的内容相同; a. 可以为:C:[] b. 也可以为:C:{“syscastCount”:[….]} c. 如果C:{…..}包含内容,内容表示群组里的新消息的个数; d. 换句话说:C:{…}是A:{…}的一个部分或子集;
- 服务器端主动返回的消息:当服务器端收到任何需要实时通知客户端的消息时,服务器端会主动向客户端推送一条socket消息;消息内容的格式如下:B:n,n=[1..5] n表示消息的类型,定义如下:
- n=1 发送私信
- n=2 名片交换请求
- n=3 系统消息
- n=4 对动态的评论
- n=5 对动态的赞 例如:B:1, 表示客户端有一条新的私心需要接受;
附:测试用例:
连接测试
- 获取pushkey后连接socket
- pushkey超时后连接socket
- 错误的pushkey连接socket
- 网络中断后,提示“网络故障,连接失败”
- 网络中断,恢复后,socket可以自动连接
- 切换网络后,socket可以自动连接;
- 注销->重新登录后,socket可以正确连接
- cookie过期后–>自动登录–>连接socket
- 程序进入后台后,再次回到前台(1分钟内和超过1分钟)
业务测试
- 发送和接收私信 <–ok
- 发送名片交换请求 <–ok
- 接受名片交换请求 <–ok
- 系统消息 (手工编写的系统消息未测试)
- 公司群组->加入群组成功后,加入人收到提示;
- 公司群组->管理员收到加群的提示;
- 邀请用户完善个人资料 <–ok
- 对动态写评论 <–ok
- 对动态写赞 <–ok
- 对群组里的内容写赞;<–ok
- 对群组里的内容写评论;<–ok
源码:https://github.com/Aresyi/pushServer
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/05/15 02:01