Golang Go语言 gws v1.6 更新 支持通过代理拨号
gws: amazing fast go websocket server & client, powered by standard net package.
可能是越来越成熟了, 最近更新频率下降了许多, feture 方面就加了个代理支持
package main
import (
“crypto/tls”
“github.com/lxzan/gws”
“golang.org/x/net/proxy”
“log”
)
func main() {
socket, _, err := gws.NewClient(new(gws.BuiltinEventHandler), &gws.ClientOption{
Addr: “wss://example.com/connect”,
TlsConfig: &tls.Config{InsecureSkipVerify: true},
NewDialer: func() (gws.Dialer, error) {
return proxy.SOCKS5(“tcp”, “127.0.0.1:1080”, nil, nil)
},
})
if err != nil {
log.Println(err.Error())
return
}
socket.ReadLoop()
}
性能方面, 关闭压缩时单位 CPU 能效比大幅领先gorilla
; 开启压缩的话, 就只有小幅领先了, 优势还是来自 github.com/klauspost/compress
, 如果我使用标准库flate
的话差距可以忽略不计.
- 2 * vCPU
- 2.5KB Payload ( https://api.github.com/)
关闭压缩:
$ wsbench iops -c 1000 -n 100 -f ./body.json -u ws://127.0.0.1:8000/connect --compress=false
gws: IOPS=370279 P50=40ms P90=307ms P99=945ms
gorilla: IOPS=261866 P50=134ms P90=508ms P99=1664ms
开启压缩:
$ wsbench iops -c 1000 -n 100 -f ./body.json -u ws://127.0.0.1:8000/connect --compress=true
gws: IOPS=39660 P50=866ms P90=1413ms P99=1624ms
gorilla: IOPS=34668 P50=1058ms P90=1784ms P99=2322ms
┌─────┬────────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ gorilla-linux-amd64 │ default │ N/A │ fork │ 19405 │ 6m │ 0 │ online │ 0% │ 203.9mb │ caster │ disabled │
│ 0 │ gws-linux-amd64 │ default │ N/A │ fork │ 19384 │ 6m │ 0 │ online │ 0% │ 110.8mb │ caster │ disabled │
└─────┴────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Golang Go语言 gws v1.6 更新 支持通过代理拨号
更多关于Golang Go语言 gws v1.6 更新 支持通过代理拨号的实战教程也可以访问 https://www.itying.com/category-94-b0.html
OP ,我想请教下。之前我做了一个 scp 工具,但是这个是基于 rcp 协议和 ssh 写的 go 版本。感觉传输起来不是很快。我想自己实现协议+使用 OP 的 gws 。OP 有什么建议吗。https://github.com/T-TRz879/scpw/tree/v1.0.0
更多关于Golang Go语言 gws v1.6 更新 支持通过代理拨号的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
自己实现 server+client ?
gws 的优势:高性能,支持多种传输层:tcp/kcp/unix socket
劣势:没有直接支持写入分片帧,需要自行处理文件分片与重组
是的,OP 可以给点建议吗,比如方向,需要学习哪些前置知识
非对称加密,鉴权部分的命令行交互,以及文件传输协议的设计(打包压缩,分片,合并),错误处理。ReadBufferSize 设大点,局域网内单连接够用了,公网上延迟高单连接会有带宽问题。
再了解下拥塞算法,到公网上实践下,或者局域网内模拟丢包延迟。理论上弱网环境下 kcp 表现会好很多。
好的,谢谢 OP
OP ,有 gws 的交流群嘛,github 上的 vx 群码过期了。
在评论区更新了
针对您提到的Golang Go语言gws v1.6更新支持通过代理拨号这一话题,以下是我的专业回复:
Golang(又称Go语言)作为一种高效、并发的编程语言,在版本更新中不断引入新特性和优化。gws v1.6版本中对通过代理拨号的支持,无疑为开发者提供了更多灵活性和便利性。
在Go语言中,配置HTTP客户端使用代理拨号(如SOCKS5代理)通常需要借助第三方包,如golang.org/x/net/proxy
。通过该包,开发者可以创建一个代理拨号器,并将其配置到HTTP客户端的传输实例中,从而实现通过代理发送HTTP请求。
gws v1.6版本支持通过代理拨号的功能,可能意味着该版本在底层网络库或HTTP客户端实现上进行了增强,使得开发者可以更方便地利用代理拨号功能进行网络通信。
总的来说,gws v1.6版本对通过代理拨号的支持是Go语言在网络通信方面的一个重要进步,为开发者提供了更多选择和灵活性。如果您正在使用或计划使用gws v1.6版本,建议您查阅官方文档或相关资源,以获取更多关于该功能的详细信息和最佳实践。