V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LonnyWong
V2EX  ›  程序员

使用 go pipeline 大幅度提高 trzsz ( trz / tsz ) 传输速度,做比 rz / sz 好用的开源工具。

  •  
  •   LonnyWong · 2023-04-30 16:12:38 +08:00 · 2300 次点击
    这是一个创建于 573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开源地址https://github.com/trzsz/trzsz-go

    trzsz ( trz / tsz ) 是类似 rz / sz 的文件传输工具,支持 tmux ,支持目录,支持进度条,使用体验更友好…

    为了支持 tmux ,在传输文件时使用了 base64 编码,这导致传输速度有点下降,因此做了以下优化:

    1 、base64 增加了要传输的长度,于是引入压缩算法,要传输的长度就会短很多(已压缩的文件、图片和影视等除外)。

    2 、在非 tmux 场景支持 -b 二进制传输,适用于已压缩的文件、图片和影视等。

    3 、 [] 用多线程流水线,将读文件、压缩、base64 编码、发送、接收、base64 解码、解压缩、写文件等进行并行处理。这可以大幅度提高传输速度,但复杂度相对较高,一直到现在才在 golang 版实现了。

    golang 流水线版本已提交到 github https://github.com/trzsz/trzsz-go ,欢迎大家用 go 1.20 编译试用。
    暂时未正式发布,计划支持在跳板机使用 tmux 的场景,再一并发布。
    我在 github readme 最下面留了个 QQ 群号,欢迎大家加群讨论。

    参考文献:
    1 、https://go.dev/blog/pipelines
    2 、https://go.dev/blog/context

    14 条回复    2023-05-01 14:16:03 +08:00
    Chipmunker
        1
    Chipmunker  
       2023-04-30 20:58:50 +08:00
    想给开发者报告一个可能的 bug 。使用 trzsz 之后,tmux 的设置项 “set-option -g mouse on” 好像不会生效,即无法用鼠标操作 tmux 了。不知道是我设置出错了,还是 trzsz 导致的。
    LonnyWong
        2
    LonnyWong  
    OP
       2023-04-30 21:15:54 +08:00 via iPhone
    @Chipmunker 用的是 trzsz ssh 登录服务器,然后在服务器上运行 tmux ?
    Chipmunker
        3
    Chipmunker  
       2023-04-30 21:23:43 +08:00
    @LonnyWong 是的,刚刚又测试了一下,不使用 trzsz 连接 ssh 时是可以使用鼠标的。
    Chipmunker
        4
    Chipmunker  
       2023-04-30 21:34:19 +08:00
    @LonnyWong 我的测试环境如下:

    本地机器:
    Win10 19045.2846, trzsz v1.0.0 (使用 scoop 安装的), Windows Terminal v1.16.10261.0

    远程机器
    AlmaLinux release 9.1 (Lime Lynx), trzsz v1.1.1 (使用 pip 安装), tmux v3.2a
    LonnyWong
        5
    LonnyWong  
    OP
       2023-04-30 21:55:16 +08:00
    @Chipmunker 我刚在 mac 上试,是可以用鼠标的。不过 mac 和 linux 用的是 go pty 这个组件,做的比较好。

    在 Windows 用的是 ConPTY ,搜一下果然别人也遇到了: https://github.com/microsoft/terminal/issues/376

    好像是有人解决了: https://github.com/microsoft/terminal/pull/9970

    我研究下,看能不能搞定。
    LonnyWong
        6
    LonnyWong  
    OP
       2023-04-30 22:07:24 +08:00
    @Chipmunker 我在 Windows 上试了,在 Win 11 上,trzsz 1.0.0 也是支持鼠标的,不用改。在 Win 10 上是不支持的,我显示加上了 ENABLE_MOUSE_INPUT 也没用。可能是 Win 10 的 ConPTY 版本比较旧吧。
    LonnyWong
        7
    LonnyWong  
    OP
       2023-04-30 22:17:07 +08:00
    @Chipmunker 验证了在 Windows 上默认是含有 ENABLE_MOUSE_INPUT 的,不需要显式设置。也就是 trzsz 目前看是不用改的。想在 tmux 中用鼠标的话,升级到 Win 11 ?
    devoteever
        8
    devoteever  
       2023-04-30 22:31:24 +08:00 via iPhone   ❤️ 1
    小声问个问题,你压缩完是不是要 escape 特殊符号?

    那你为什么不直接压缩,还要转 base64 干什么
    Chipmunker
        9
    Chipmunker  
       2023-04-30 23:02:05 +08:00
    @LonnyWong 感谢 OP 的回复。由于硬件不支持 Win11, 所以一直没有升级到 Win11 。其实在 tmux 中用鼠标也不是刚需,没有也能忍。感谢 OP 开发的这个好工具!
    LonnyWong
        10
    LonnyWong  
    OP
       2023-04-30 23:04:20 +08:00
    @devoteever 压缩完之后是二进制,有非常多的特殊符号,base64 编码之后就没有特殊符号了。

    之所以用 base64 ,是因为要 escape 的特殊符号有些多,每个特殊符号 escape 之后就变成两个字节。当特殊符号超过 85 个,还不如 base64 来的效果更好。[128 - 255] 这些字符,我不是很确定 tmux 会不会 100% 兼容,都当成是特殊字符算了,至少 tmux 是兼容 base64 这些可见字符的。
    dreamramon
        11
    dreamramon  
       2023-05-01 08:57:54 +08:00
    这种东西是不是用 rust 写比较好,go 的都很慢。
    acerphoenix
        12
    acerphoenix  
       2023-05-01 10:49:55 +08:00
    试过两次,都是因为 trzsz 得分别适配对应终端,这个确实太麻烦了。我用 windterm ,如果作者有闲跟进,不胜感激。
    LonnyWong
        13
    LonnyWong  
    OP
       2023-05-01 14:12:57 +08:00 via iPhone
    @dreamramon 其实都差不多,go 和 rust 都很快,编译后差别不会有多少。
    LonnyWong
        14
    LonnyWong  
    OP
       2023-05-01 14:16:03 +08:00 via iPhone
    @acerphoenix windterm 是 c 写的,首先需要 windterm 的作者愿意合入,然后也要用 c 写个 trzsz 的库,暂时还没空搞。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2720 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:00 · PVG 18:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.