当前位置:首页 > WebSocket > 正文内容

申研社websocket通信规定

陈杰5个月前 (01-29)WebSocket921

一、建立连接和维持连接

 

1、建立连接 测试地址ws://api.shenyanshe.95shouyou.com/websocket

 

2、约定客户端发送数据格式为 json字符串,格式为

{

type : type

data : {

data

}

}

 

3、添加建立连接成功进行绑定uid,必须进行绑定uid操作并且成功后才能进行正常的数据通信

发送socket数据为

{

type : bind,

data : {

token : http请求中的headerauthorizationInfo

}

}

 

 

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请求中的headerauthorizationInfo

}

}

 

并且在设置一个全局变量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并重新连接

 

8sendSocket 发送数据时,应该再次检测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}}




扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由何烦过虎溪发布,如需转载请注明出处。

转载请注明出处:http://blog.95shouyou.com/?id=34

分享给朋友:

相关文章

workerman拆分events文件,实现常规编程习惯

workerman拆分events文件,实现常规编程习惯

wokerman的gateway很好用,自动解决了扩展性,分布式等较底层的东西。所有的逻辑代码只需要专注于events.php文件就行了,但是作者对于events编程的介绍比较少,如果从业多年的老手自...

workerman中捕获notice错误并抛出异常

在workerman中出现了notice错误并不会中断程序运行,这是抛出一个无关紧要的提示,这显然与我们的程序设计初衷不符。例如我们去获取数组中的一个key-value值,当key不存在的时候只是提示...

laravel利用websocket搭建一个简单的实时聊天系统

laravel利用websocket搭建一个简单的实时聊天系统

主要实现功能就是用户之间的的实时聊天。理一下业务逻辑:用户A给用户B发送消息>如果用户B在线,直接通过websocket推送消息,用户B接受到消息后写入前端数据库,并归档数据>如果用户B不...

uniapp的websocket无法监听到onSocketClose和onSocketError

项目框架使用的前端uniapp+后端laravel+workerman websocket写的,主要功能是聊天室系统。但是在开发完成实际体验过程中发现了一个有趣的现象。websocket老是无缘无故的...

nginx下反向代理开启websocket的wss服务

nginx下反向代理开启websocket的wss服务

通过nginx配置好网站的ssl证书后添加   location /wss  {    proxy_pass http://127.0.0.1:828...

Workerman-写一个简单的websocket双向通信并实现MVC,用来开发游戏服务器

最近在看Workerman,发现这是一个真的很好用的东西。文档相当丰富,而且大神walker很贴心,有问必答。下面记一下一个简单的基于GatewayWorker框架写的websocket的程序。传统的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。