调用时序图如下:
源码:https://github.com/Aresyi/pushServer
(1)获取socket登录秘钥(登录口令):key.
key的时效为1分钟,如果客户端在拿到key后,1分钟之内不执行socket登录验证的流程,则key自动生效;
接口服务地址:/user/getPushKey
(2)客户端拿到key后,与服务器端建立socket连接,并立即发送key到服务器。
如果key过期,则服务器会执行下列操作:
a.向客户端发送一个字符:大写的X,
b. 发送成功后,关闭socket连接;
发送key的格式如下:
用户ID=密钥,如123=abcdef
如果key不正确,则服务器端会直接关闭连接,不向客户端返回任何内容;
(3)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”:[]中的内容相同;
可以为:C:[]
也可以为:C:{“syscastCount”:[….]}
如果C:{…..}包含内容,内容表示群组里的新消息的个数;
换句话说:C:{…}是A:{…}的一个部分或子集;
(5)服务器端主动返回的消息:
当服务器端收到任何需要实时通知客户端的消息时,服务器端会主动向客户端推送一条socket消息;
消息内容的格式如下:
B:n
n=[1..5] n表示消息的类型,定义如下:
n=1 发送私信
n=2 名片交换请求
n=3 系统消息
n=4 对动态的评论
n=5 对动态的赞
例如:B:1
表示客户端有一条新的私心需要接受;
附:测试用例:
连接测试
(1)获取pushkey后连接socket
(2)pushkey超时后连接socket
(3)错误的pushkey连接socket
(4)网络中断后,提示“网络故障,连接失败”
(5)网络中断,恢复后,socket可以自动连接
(6)切换网络后,socket可以自动连接;
(7)注销->重新登录后,socket可以正确连接
(8)cookie过期后–>自动登录–>连接socket
(9)程序进入后台后,再次回到前台(1分钟内和超过1分钟)
业务测试
(1)发送和接收私信 <–ok
(2)发送名片交换请求 <–ok
(3)接受名片交换请求 <–ok
(4)系统消息 (手工编写的系统消息未测试)
(5)公司群组->加入群组成功后,加入人收到提示;
(6)公司群组->管理员收到加群的提示;
(7)邀请用户完善个人资料 <–ok
(8)对动态写评论 <–ok
(9)对动态写赞 <–ok
(10)对群组里的内容写赞;<–ok
(11)对群组里的内容写评论;<–ok