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=tue 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 │ └─────┴────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘ 