Apache dubbo-getty 1.5.0 发布,限制 TCP 客户端重连行为,修复 WebSocket 并行安全问题
经过半年改进,dubbo-getty 发布了 v1.5.0 版本,致力于提升稳定性,并修复已知问题,为用户提供更可靠的网络通信服务。
如昔,依然坚持 "Getty 只考虑使用 Go 语言原生的网络接口,如果遇到网络性能瓶颈也只会在自身层面寻找优化突破点" Go 语言网络库 getty 的那些事 。
1. 限制 TCP 客户端重连行为
Getty 支持 TCP lazy reconnect,所谓 lazy reconnect,Go 语言网络库 getty 的那些事 有详细描述。
lazy reconnect 整体流程图如上。
近期社区 No-SilverBullet 筒子觉得:服务端的连接数是动态的,所以我觉得 getty 还是应该有一个兜底的逻辑,而不是 "无脑的" 一直去重连,可以 "添加一个最多重来次数或者重连时间限制":
-
- 客户端在 read EOF 时,停止重连维护连接池的行为
-
- reconnect 增加最大次数,当重连次数超过设定的连接数时,退出
具体改进是:
-
- session 增加了新的 attribute(ignoreReconnectKey),用于标识是否重连
-
- 最大重连次数设定为用户设定的连接数
相关 PR 是 https://github.com/apache/dubbo-getty/pull/117。
2. 修复 WebSocket 并行安全问题
Getty WebSocket 通信依赖于 gorilla/websocket 这个包,进行 WebSocket 网络通信时只能 "支持一个并发 reader 和一个并发 writer"。
Connections support one concurrent reader and one concurrent writer. Applications are responsible for ensuring that no more than one goroutine calls the write methods (NextWriter, SetWriteDeadline, WriteMessage, WriteJSON, EnableWriteCompression, SetCompressionLevel) concurrently and that no more than one goroutine calls the read methods (NextReader, SetReadDeadline, ReadMessage, ReadJSON, SetPongHandler, SetPingHandler) concurrently. The Close and WriteControl methods can be called concurrently with all other methods. -- from https://pkg.go.dev/github.com/gorilla/websocket#hdr-Concurrency
Getty WebSocket 以往没有注意到这个规则,近期有人在 [issue 120] 中报出了这个 bug,社区筒子立即响应,添加了 gettyWSConn:threadSafeWriteMessage
和 gettyWSConn:threadSafeReadMessage 这两个接口以解决并行通信的 data race 问题,相关代码详见 PR 121 和 PR 123。
相关 PR 是:
https://github.com/apache/dubbo-getty/pull/121
https://github.com/apache/dubbo-getty/pull/123
在 PR 121 中我们顺便解决了 [issue 103] 描述的 session 异常关闭问题。
3 致谢
感谢所有为 Dubbo-Getty 1.5.0 做出贡献的社区成员,包括 issue/PR 提交者、代码 reviewer 以及文章作者【排名不分先后,依据字母序列】:
- chenbaoding2818
- FoghostCn
- Lvnszn
- No-SilverBullet
- seven-ali
alexstocks/getty 作为 dubbo-getty 的上游仓库,已在 alexstocks/gettyv1.5.0 中吸收了本次更新。
另外,我们搜到一些第三方作者对 getty 的解析文章,代表社区向这些传播 getty 的文章作者致敬:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Pika 主从数据同步状态指标 “repl_connect_status” 简介
1 背景 PR #2638 合并后,Slave 超时后重新与 Master 建连,可能会有更长的时间处于 "connecting" 状态。此时主从已经建连成功,但若用户欲获取主从数据同步状态,只能查看日志,很不方便。 2 新增指标 "repl_connect_status" 为了方便用户或其他旁路系统实时获取 Pika 的数据同步状态,我们在 PR #2656 中新增了主从数据同步 info 命令指标 ”repl_connect_status“。 3 指标获取方式 向 Slave 端发送 info/info replication 命令进行获取,该值也会出现在 Slave 实例上,对 Master 发送 info 命令是取不到该指标的 4 指标格式 每个 db 均有自己的 repl_connect_status 值,以 \n 分隔,示例如下: repl_connect_status: db0:syncing_full db1:syncing_full db2:try_to_incr_sync db3:try_to_incr_sync db4:try_to_incr_sync db5:t...
- 下一篇
简单4步,带你用华为云MetaStudio制作数字人短片
本文分享自华为云社区《使用MetaStudio生产线四步制作数字人视频》,作者: yd_298097624。 随着AIGC新技术尤其是大模型技术的发展,音视频行业、数字内容生产行业正在经历这从生产方式和生产效率上的一个巨大变化。预测到2030年有AI大模型生成的数字内容比例将高达90%,包括通过AIGC来生成数字人,数字人视频等,本博文就来教大家如何用华为云MetaStudio数字内容生产线制作数字人视频。本文介绍了两种制作数字人视频的方式,一种直接在console上操作,另一种用API制作。 1 开通MetaStudio服务 进入【数字内容生产线MetaStudio】,在搜索框中输入MetaStudio,点击进入服务。 点击【分身数字人视频制作】的【开通】按钮。 点击【前往MetaStudio工作台】。 2 工作台制作视频 2.1 进入分身视频制作 点击【分身视频制作】的【开始创建】按钮,进入工作台。 2.2 选择数字人模型 点击【角色】按钮,可以查看所有系统内置的数字人模型,选择一个用来制作视频。 2.3 选择视频背景 点击【背景】按钮,可以查看所有系统内置的背景图片,选择一个用来...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程