最近开发新功能 有借助 webscocket 推送行情.
发现一个问题, 增量推送 存在丢包现象;
原因:
·webscocket·服务端 diff数据 只推一次 客户端一丢包 下次 diff数据 就失效了.
解决方案 :
同事推荐个方案 服务端发包传递序号 1-1024 循环使用.
客户端拿包 需要判断如果序号不连贯 就全量拿包.
做游戏也是相同如果当前包序号3 拿到了5 证明丢了一个包 , 需要断开连接.
我们做平台的 可以好一点不需要针对不同用户创建 序号池, 自己有个自增编号就行了 数据是一致的.
文章作者: Leon
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Leon!
相关推荐
2021-09-14
WebSocket是什么
WebSocket:实时双向通信的协议WebSocket是一种在Web应用程序中实现实时双向通信的协议。它提供了一种持久化的连接,允许客户端和服务器之间进行全双工通信,从而实现实时数据交换。本文将介绍WebSocket的基本原理、优势以及在Web开发中的应用。 1. WebSocket的基本原理WebSocket协议建立在传输层协议(如TCP)之上,通过在客户端和服务器之间建立一条持久化的连接,实现双向通信。与传统的HTTP请求-响应模型不同,WebSocket允许服务器主动向客户端发送数据,而不需要客户端发起请求。 在建立WebSocket连接时,客户端和服务器通过进行一次特殊的握手过程来协商连接的建立。一旦连接建立成功,双方就可以通过发送消息来进行实时的双向通信。这种持久化的连接减少了通信的延迟,并且可以更高效地传输实时数据。 2. WebSocket的优势相比传统的HTTP请求-响应模型,WebSocket具有以下优势: 实时性和效率:WebSocket提供了实时的双向通信,服务器可以主动向客户端推送数据,避免了频繁的轮询或长轮询的开销,提供更高效的数据传输和实时性。...
2023-07-14
WebSocket 协议部分详解
WebSocket 是一种支持双向通信的网络协议。 双向通信:客户端(比如浏览器)可以向服务端发送消息,服务端也可以主动向客户端发送消息。这样就实现了客户端和服务端的双向通信,那么上面所说的消息推送就比较容易实现了。 原先的 HTTP1.0/1.1 只能是客户端向服务端发送消息。 协议特点: 建立在 TCP 协议之上。 WebSocket 协议是从 HTTP 协议升级而来。 与 HTTP 协议良好兼容新。默认端口是 80 和 443,握手阶段采用 HTTP 协议。 数据格式比较轻量,通信效率高,性能开销小。 可以发送文本,也可以发送二进制数据。 没有同源限制,客户端可以与任意服务端通信。 协议标识符是 ws(如果加密,则为 wss),服务器网址就是 URL。 可以支持扩展,定了扩展协议。 保持连接状态,websocket 是一种有状态的协议,通信就可以省略部分状态信息。 实时性更强,因为是双向通信协议,所以服务端可以随时向客户端发送数据。 WebSocket 数据交换数据帧格式在 WebSocket 协议中,客户端与服务端数据交换的最小信息单位叫做帧(frame),由 1...
2023-05-24
Webscoket 客户端连接 2分钟断开 1006 错误码
问题描述 :观察客户端 每2分钟 websocket 断开连接, 提示 1006 CLOSE_ABNORMAL. 排查问题 :服务端观察日志能发现的确与客户端同一时间断开连接. 但服务端onClose事件并不是服务端主动要求断开的.客户端也有6秒 定时发ping包, 双方心跳检测都不是超时问题.知道运维同学 帮忙查了下, 使用cloudflare CDN的新域名观察后并没有这个问题.那就破案了,现有的域名CND用的都是Google Cloud , 运维同学咨询了谷歌售后服务. 回答的都绝了 聊天内容如下 : > $1 : 关于负载均衡的问题,,用户 -> 负载均衡 -> nginx,https的服务没有问题,websocket的服务2分钟后就断了> $1 : timeout设置为999999999> $2 : 这是有哪些地方需要单独设置吗 > $1 : 对> $2 : 那会影响https的服务吗> $1 : 对> $2 : 把websocket单独令出来 上面对话简单来说就是 我们webscoket服务用的谷歌云的负载...
2020-02-22
PHP 连接币安,okex,火币,websoket的示例代码
看到有同学在 Webscocket pong 包 php 踩坑实例 文章中留言 要我给出Demo满足这位同学的要求: 下面Demo使用的 Saber 人性化的协程HTTP客户端封装库运行环境 swoole4.2+ php7.1+ 需要使用协程 go(); demo 并不全 但坑都是踩过的 getSendMessage 创建订阅数据json格式这个就不提供了, 很简单没坑, 但最好控制好订阅交易对数量. 币安的webscocket 主要坑在于 ping包 非常正规的使用opcode是9, 并且收包中的data是空包, 回pong包 opcode传10./** * 币安现货ws 订阅 * @param array $symbolList 订阅交易对列表 * @param $subType 订阅类型 * @return bool */public function binanceSubscribe(array $symbolList, $subType = self::SUB_SPOT_DEPTH_TYPE){ // 订阅地址 $this->stream...
2015-07-11
TCP、UDP、HTTP和WebSocket 之间的区别
TCP(Transmission Control Protocol): TCP是一种可靠的、面向连接的传输层协议。 TCP提供数据传输的可靠性保证,通过序列号、确认应答、重传等机制来确保数据的可靠性和顺序性。 TCP适用于对数据传输可靠性要求较高的场景,如文件传输、电子邮件等。 UDP(User Datagram Protocol): UDP是一种不可靠的、面向无连接的传输层协议。 UDP不提供数据传输的可靠性保证,数据包可能会丢失、乱序或重复。 UDP适用于对实时性要求较高、数据传输速度更重要的场景,如音视频传输、实时游戏等。 HTTP(Hypertext Transfer Protocol): HTTP是基于TCP协议的应用层协议,用于在客户端和服务器之间传输超文本数据。 HTTP是一种无状态的请求-响应协议,每个请求和响应之间是相互独立的。 HTTP适用于传输网页、图片、文本等静态资源,以及进行简单的数据交互。 WebSocket: WebSocket是一种全双工通信协议,建立在HTTP协议之上。 WebSocket允许客户端和服务器之间进行双向实时通信,相比于H...
2020-04-03
Swoole WebSoctet 使用 zlib 压缩之 PHP 与 pako.js
一些理论知识先说一下deflate算法吧,deflate是zip压缩文件的默认算法, 其实deflate现在不光用在zip文件中, 在7z, xz等其他的压缩文件中都用, 实际上deflate只是一种压缩数据流的算法,任何需要流式压缩的地方都可以用。 也就是说 zlib 格式, gzip 格式,是文件格式,deflate 是这些文件格式使用的压缩算法。 传输方式 deflate 压缩后是二进制,通常有两种传输方式: 二进制 Base64编码 二进制PHP // 压缩,注意:其中 ZLIB_ENCODING_DEFLATE 参数是不能少的$data = gzdeflate(json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 6, ZLIB_ENCODING_DEFLATE);// 使用 swoole 以二进制的方式发送$webSocket->push($fd, $data, WEBSOCKET_OPCODE_BINARY); JavaScript // 消息事件ws.onmess...
评论
公告
记录技术实践,分享学习与思考。



