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

2023-04-30 16:12:38 +08:00
 LonnyWong

开源地址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

2285 次点击
所在节点    程序员
14 条回复
Chipmunker
2023-04-30 20:58:50 +08:00
想给开发者报告一个可能的 bug 。使用 trzsz 之后,tmux 的设置项 “set-option -g mouse on” 好像不会生效,即无法用鼠标操作 tmux 了。不知道是我设置出错了,还是 trzsz 导致的。
LonnyWong
2023-04-30 21:15:54 +08:00
@Chipmunker 用的是 trzsz ssh 登录服务器,然后在服务器上运行 tmux ?
Chipmunker
2023-04-30 21:23:43 +08:00
@LonnyWong 是的,刚刚又测试了一下,不使用 trzsz 连接 ssh 时是可以使用鼠标的。
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
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
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
2023-04-30 22:17:07 +08:00
@Chipmunker 验证了在 Windows 上默认是含有 ENABLE_MOUSE_INPUT 的,不需要显式设置。也就是 trzsz 目前看是不用改的。想在 tmux 中用鼠标的话,升级到 Win 11 ?
devoteever
2023-04-30 22:31:24 +08:00
小声问个问题,你压缩完是不是要 escape 特殊符号?

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

之所以用 base64 ,是因为要 escape 的特殊符号有些多,每个特殊符号 escape 之后就变成两个字节。当特殊符号超过 85 个,还不如 base64 来的效果更好。[128 - 255] 这些字符,我不是很确定 tmux 会不会 100% 兼容,都当成是特殊字符算了,至少 tmux 是兼容 base64 这些可见字符的。
dreamramon
2023-05-01 08:57:54 +08:00
这种东西是不是用 rust 写比较好,go 的都很慢。
acerphoenix
2023-05-01 10:49:55 +08:00
试过两次,都是因为 trzsz 得分别适配对应终端,这个确实太麻烦了。我用 windterm ,如果作者有闲跟进,不胜感激。
LonnyWong
2023-05-01 14:12:57 +08:00
@dreamramon 其实都差不多,go 和 rust 都很快,编译后差别不会有多少。
LonnyWong
2023-05-01 14:16:03 +08:00
@acerphoenix windterm 是 c 写的,首先需要 windterm 的作者愿意合入,然后也要用 c 写个 trzsz 的库,暂时还没空搞。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX