websocket package 那么多, 到底要怎么选? 今天为大家带来3款 go websocket 测评, 希望对您有些帮助. 测试代码仓库: [go-websocket-testing](https://github.com/lxzan/go-websocket-testing) .
#### Packages
- https://github.com/lxzan/gws
- https://github.com/gorilla/websocket
- https://github.com/nhooyr/websocket
#### WebSocket 协议测试 (autobahn-testsuite)
- 工具: `autobahn-testsuite`
- 命令:
```bash
docker run -it --rm \
-v ${PWD}/config:/config \
-v ${PWD}/reports:/reports \
crossbario/autobahn-testsuite \
wstest -m fuzzingclient -s /config/fuzzingclient.json
```
每个包基本都是用的默认配置, 为了节省时间, 本项测试关闭了压缩.
可以看到, 尽管`gorilla/websocket` 和 `nhooyr/websocket`宣称通过了所有`autobahn-testsuite`测试, 但可能需要开发者额外写一些代码.
- 结果
| package | Pass | Info | Non-Strict | Unclean | Failed |
| ----------------- | ---- | ---- | ---------- | ------- | ------ |
| lxzan/gws | 294 | 3 | 4 | 0 | 0 |
| gorilla/websocket | 223 | 3 | 0 | 85 | 75 |
| nhooyr/websocket | 173 | 3 | 0 | 0 | 125 |
#### 延迟测试
对于一般的线上场景,它们性能都够用了,所以我只测试下延迟情况,感兴趣的朋友可以自己跑下其它负载下的压测
- 场景: 1000连接, 每秒发送100条1KiB的消息
- 工具: `tcpkali`
- 命令:
```bash
tcpkali -c 1000 --connect-rate 200 -r 100 -T 1200s -f assets/1K.txt --ws ip:port
```
- 结果
![image.png](https://static.golangjob.cn/230216/f27f6f6a17278d3f31ccc30ce06c4754.png)
![image.png](https://static.golangjob.cn/230216/9b1b6b90f7a22891ad1cd2462acdd36c.png)
![image.png](https://static.golangjob.cn/230216/28ec436cead833d8f7d8d84462e48890.png)
有疑问加站长微信联系(非本文作者)