申研社websocket通信规定
一、建立连接和维持连接
1、建立连接 测试地址ws://api.shenyanshe.95shouyou.com/websocket
2、约定客户端发送数据格式为 json字符串,格式为
{
type : type
data : {
data
}
}
3、添加建立连接成功进行绑定uid,必须进行绑定uid操作并且成功后才能进行正常的数据通信
发送socket数据为
{
type : ’bind’,
data : {
token : ’http请求中的header头 authorizationInfo’
}
}
4、添加socket onMessage回调
服务器发送的数据包遵循json格式
$error = [
'type' => $type,
'msg' => $msg,
'code' => $code,
'data' => $data
];
通常
type为约定好的信息类型,如bind(绑定到uid到当前socket连接)
msg为自定义的操作反馈信息
code为状态码,一般情况下 code==200的时候为成功,否则为失败
data为返回数据
5、设置心跳定时器
设置一个20秒的定时器定时向服务器发送一段特定的心跳数据
发送格式为
{
type : ’ping’,
data : {
token : ’http请求中的header头 authorizationInfo’
}
}
并且在设置一个全局变量pongTime。
该pongTime应该在Scoket.onOpen事件中取当前unix时间戳
6、在onMessage中可以通过不同的type进行不同的操作。
有一个特别的type需要进行定义,就是心跳。
前面提到我们设置了一个定时器来向服务器不断的发送心跳数据ping
当服务器接收到了该心跳数据后会立马返回一个数据包 pong
格式为
{
code : 200
type : ’pong’
}
你需要在onMessage中定义,当收到pong类型的数据且code==200的时候,更新一下全局变量 pongTime
pongTime = 现行 unix时间戳
7、监听socket连接是否维持正常
在Soceket.onOpen事件中应该设置一个定时器 定时10秒(比心跳间隔少10秒)
该定时器工作内容是判断当前的unix时间戳 - pongTime 是否大于30秒
如果大于30秒则代表还未收到pong心跳包,应该关闭之前的socket并重新连接
8、当sendSocket 发送数据时,应该再次检测pong
ws://api.shenyanshe.95shouyou.com/websocket
绑定账号
{"type":2,"data":{"token":"YGXgi4Ry+g9VhoQvsc82CmGnLmnb4SvIuwIyoMdqN+R6qIaE5HWJpPH06JoWhwB2dUib7/CitKTNxEeHqGTgMJ5WFfjIbHc+88xf3/u/i2xkMCeW0YaSyMyq+rxeiplLtwoVuT4cChk0HhcAo8voTni13XaKgvmhWdgscXsf+EP3qR4cA0e5QsJX+sdIP4lo+irvTSu0CcqrT2P1Y3FkCsuXWrhjpCEK/sQ71f40SR7ApKPtkrtSkitLRMz7v9UL"}}
加入id14集合室
{"type":1001,"data":{"id":14}}
{"type":1011,"data":{"id":14}}
发送id14集合室消息
{"type":1051,"data":{"type":1,"content":"哈哈哈哈"}}
交换id14集合室位置
{"type":1014,"data":{"id":14,"seat":2}}
交换id14集合室顺序排位
{"type":1012,"data":{"id":14,"seat":2}}
交换id14集合室随机排位
{"type":1013,"data":{"id":14,"seat":2}}
集合室踢出用户
{"type":1015,"data":{"member_id":14,}}
集合室禁言或允许发言用户 true为允许发言
{"type":1016,"data":{"member_id":14,"voice":true}}
集合室出题
{"type":1017,"data":{"topic":[1,2,3]}}
集合室传递麦序
{"type":1018,"data":{"member_id":1}}
集合室出题
{"type":1016,"data":{1,2,3}}
{"type":1,"data":{"id":14}}
