gws v1.6 更新: 支持通过代理拨号 - V2EX
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Nazz

gws v1.6 更新: 支持通过代理拨号

  •  
  •   Nazz Jul 17, 2023 1557 views
    This topic created in 1035 days ago, the information mentioned may be changed or developed.

    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的话差距可以忽略不计.

    关闭压缩:

     $ 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 │ └─────┴────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘ 
    9 replies    2023-08-26 16:23:31 +08:00
    trzzzz
        1
    trzzzz  
       Aug 25, 2023 via iPhone
    OP ,我想请教下。之前我做了一个 scp 工具,但是这个是基于 rcp 协议和 ssh 写的 go 版本。感觉传输起来不是很快。我想自己实现协议+使用 OP 的 gws 。OP 有什么建议吗。https://github.com/T-TRz879/scpw/tree/v1.0.0
    Nazz
        2
    Nazz  
    OP
       Aug 25, 2023 via Android
    @trzzzz 自己实现 server+client ?
    Nazz
        3
    Nazz  
    OP
       Aug 25, 2023 via Android
    gws 的优势:高性能,支持多种传输层:tcp/kcp/unix socket
    劣势:没有直接支持写入分片帧,需要自行处理文件分片与重组
    trzzzz
        4
    trzzzz  
       Aug 25, 2023
    @Nazz 是的,OP 可以给点建议吗,比如方向,需要学习哪些前置知识
    Nazz
        5
    Nazz  
    OP
       Aug 25, 2023 via Android
    @trzzzz 非对称加密,鉴权部分的命令行交互,以及文件传输协议的设计(打包压缩,分片,合并),错误处理。ReadBufferSize 设大点,局域网内单连接够用了,公网上延迟高单连接会有带宽问题。
    Nazz
        6
    Nazz  
    OP
       Aug 25, 2023 via Android
    再了解下拥塞算法,到公网上实践下,或者局域网内模拟丢包延迟。理论上弱网环境下 kcp 表现会好很多。
    trzzzz
        7
    trzzzz  
       Aug 25, 2023
    @Nazz 好的,谢谢 OP
    trzzzz
        8
    trzzzz  
       Aug 26, 2023
    @Nazz OP ,有 gws 的交流群嘛,github 上的 vx 群码过期了。
    Nazz
        9
    Nazz  
    OP
       Aug 26, 2023 via Android
    @trzzzz 在评论区更新了
    About     Help     Advertise     Blog     API     FAQ     Solana     3045 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 02:49 PVG 10:49 LAX 19:49 JFK 22:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86