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

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

  •  
  •   LonnyWong · 355 天前 · 2048 次点击
    这是一个创建于 355 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开源地址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  
       355 天前
    想给开发者报告一个可能的 bug 。使用 trzsz 之后,tmux 的设置项 “set-option -g mouse on” 好像不会生效,即无法用鼠标操作 tmux 了。不知道是我设置出错了,还是 trzsz 导致的。
    LonnyWong
        2
    LonnyWong  
    OP
       355 天前 via iPhone
    @Chipmunker 用的是 trzsz ssh 登录服务器,然后在服务器上运行 tmux ?
    Chipmunker
        3
    Chipmunker  
       355 天前
    @LonnyWong 是的,刚刚又测试了一下,不使用 trzsz 连接 ssh 时是可以使用鼠标的。
    Chipmunker
        4
    Chipmunker  
       355 天前
    @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
       355 天前
    @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
       355 天前
    @Chipmunker 我在 Windows 上试了,在 Win 11 上,trzsz 1.0.0 也是支持鼠标的,不用改。在 Win 10 上是不支持的,我显示加上了 ENABLE_MOUSE_INPUT 也没用。可能是 Win 10 的 ConPTY 版本比较旧吧。
    LonnyWong
        7
    LonnyWong  
    OP
       355 天前
    @Chipmunker 验证了在 Windows 上默认是含有 ENABLE_MOUSE_INPUT 的,不需要显式设置。也就是 trzsz 目前看是不用改的。想在 tmux 中用鼠标的话,升级到 Win 11 ?
    devoteever
        8
    devoteever  
       355 天前 via iPhone   ❤️ 1
    小声问个问题,你压缩完是不是要 escape 特殊符号?

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

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