golang 的哪个 websocket 好用?

2023-02-25 16:48:54 +08:00
 dw2693734d

gorilla 已经不维护了

8485 次点击
所在节点    Go 编程语言
62 条回复
lesismal
2023-02-25 23:23:32 +08:00
@Nazz #9 gws 不是一骑绝尘的。。。你看我 #19 ,你把 tinyws 和 nbio 的 IOModBlocking 和 IOModMixed 也跑来对比下试试。。
lesismal
2023-02-25 23:27:40 +08:00
nbio 的 websocket 解析器,是支持异步流数据解析的、同步 io 的数据丢进去也一样解析,所以本身是有点吃亏的、逻辑比同步解析复杂得多,而且涉及半包 cache 之类的,否则只是同步解析,还能实现得更快。同步和异步 io 都能处理,所以结合自身的 IOModMixed ,能把性能和硬件消耗做到最佳,不同在线量全 cover ,其他框架高在线量太吃硬件资源了
lesismal
2023-02-25 23:34:38 +08:00
@guonaihong 好像很久没出现了,是在忙着搬砖嘛 :joy:
Nazz
2023-02-25 23:42:00 +08:00
@lesismal 做测试很费时间,在测评里我只测了 1KiB ,
lesismal
2023-02-25 23:52:53 +08:00
@Nazz 是啊,多个框架跑一轮还得统计很麻烦,而且可以测试得内容太多了,tls non-tls http ws rpc 各种,所以一些项我也只跑了简单测试
guonaihong
2023-02-25 23:57:00 +08:00
@lesismal 别提了,搬砖已经冒出火星子了。最近最大的痛点就是搬得不够快。副作用就撸了一个 https://github.com/antlabs/h2o ,日产千行代码不是梦。
Nazz
2023-02-26 00:08:26 +08:00
@lesismal 用 Prometheus+Grafana 统计挺方便的,就
Nazz
2023-02-26 00:08:51 +08:00
@Nazz 就怕机器不够强大
lesismal
2023-02-26 00:36:42 +08:00
@guonaihong 我是超级不喜欢 grpc ,哈哈哈,用我自己的 arpc 一把梭才是爽。。。
lesismal
2023-02-26 00:40:30 +08:00
@Nazz #27
这有点杀鸡用牛刀了,而且还是要统计 qps/tps 结合进程自己的消耗,压测里自带这些工具就可以的,比如字节这种:
github.com/cloudwego/kitex-benchmark

但是字节这个 perf 不跨平台,我自己用 gopsutil 简单封装了些:github.com/lesismal/perf
lesismal
2023-02-26 01:51:39 +08:00
@Nazz 我之前的简单压测是几个字节的 payload ,刚才又试了下 1k 字节 payload ,我环境得到的数据:
1k-1w 范围连接数时,tinyws 和 gws qps 差不多,nbio 略快,内存占用 gws > tinyws > nbio ,但内存差距不算特别大
10w 连接时,nbio 快更多一些,内存占用 gws 约 4.17G ,tinyws 约 3.73G, nbio 约 1.2G ,内存占用差距比较明显,而且 gws 和 tinyws 的 qps 不稳定、qps 摆动幅度较大,应该是连接数太多 gc 时 stw 更明显导致,nbio 的 qps 比较稳定
相同连接数压测的 cpu 消耗差不多,nbio 好像略低
Nazz
2023-02-26 06:07:15 +08:00
@lesismal 连接数太多 net/http 肯定干不过 gnet/nbio 这些实现的
Nazz
2023-02-26 08:42:57 +08:00
@lesismal ws 客户端我是用的 tcpkali, cpu 占用率超低
Nazz
2023-02-26 08:55:17 +08:00
@lesismal 刚测了一下 1000 连接, nbio IOModBlocking 跑了 2600Mbps, gws:dev 同步读异步写是 5800Mbps, nbio 兼容多种 IO 模式是有开销的吧
Nazz
2023-02-26 09:01:41 +08:00
@lesismal Prometheus+Grafana 可视化效果好, 配置一次就可以了, 有钱的话真想搞一台线程撕裂者, 跑 k8s 来做测试.
Nazz
2023-02-26 10:02:14 +08:00
@lesismal 很多人被带偏了,无脑选择 channel 。随便想想就知道,有锁的 channel 怎么可能比直接用锁高效
lesismal
2023-02-26 13:26:29 +08:00
@Nazz
> 刚测了一下 1000 连接, nbio IOModBlocking 跑了 2600Mbps, gws:dev 同步读异步写是 5800Mbps, nbio 兼容多种 IO 模式是有开销的吧

代码发我下我试试看。多种 io Upgrade 后就没什么大影响了
lesismal
2023-02-26 13:27:58 +08:00
@Nazz go 做简单 curd 确实不难,但是这种遍地并发对绝大多数人来说都挺难的,chan 适合解耦、串行化,能避免并发不熟的人一不小心就死锁了,但是性能肯定差一些
lesismal
2023-02-26 13:30:04 +08:00
@Nazz 运维用这种监控集群健康挺好,做 benchmark ,尽量保持测试环境稳定、少部署额外软件好些
Nazz
2023-02-26 13:32:28 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919140

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX