开源地址: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
1
Chipmunker 2023-04-30 20:58:50 +08:00
想给开发者报告一个可能的 bug 。使用 trzsz 之后,tmux 的设置项 “set-option -g mouse on” 好像不会生效,即无法用鼠标操作 tmux 了。不知道是我设置出错了,还是 trzsz 导致的。
|
2
LonnyWong OP @Chipmunker 用的是 trzsz ssh 登录服务器,然后在服务器上运行 tmux ?
|
3
Chipmunker 2023-04-30 21:23:43 +08:00
@LonnyWong 是的,刚刚又测试了一下,不使用 trzsz 连接 ssh 时是可以使用鼠标的。
|
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 |
5
LonnyWong OP @Chipmunker 我刚在 mac 上试,是可以用鼠标的。不过 mac 和 linux 用的是 go pty 这个组件,做的比较好。
在 Windows 用的是 ConPTY ,搜一下果然别人也遇到了: https://github.com/microsoft/terminal/issues/376 好像是有人解决了: https://github.com/microsoft/terminal/pull/9970 我研究下,看能不能搞定。 |
6
LonnyWong OP @Chipmunker 我在 Windows 上试了,在 Win 11 上,trzsz 1.0.0 也是支持鼠标的,不用改。在 Win 10 上是不支持的,我显示加上了 ENABLE_MOUSE_INPUT 也没用。可能是 Win 10 的 ConPTY 版本比较旧吧。
|
7
LonnyWong OP @Chipmunker 验证了在 Windows 上默认是含有 ENABLE_MOUSE_INPUT 的,不需要显式设置。也就是 trzsz 目前看是不用改的。想在 tmux 中用鼠标的话,升级到 Win 11 ?
|
8
devoteever 2023-04-30 22:31:24 +08:00 via iPhone 1
小声问个问题,你压缩完是不是要 escape 特殊符号?
那你为什么不直接压缩,还要转 base64 干什么 |
9
Chipmunker 2023-04-30 23:02:05 +08:00
@LonnyWong 感谢 OP 的回复。由于硬件不支持 Win11, 所以一直没有升级到 Win11 。其实在 tmux 中用鼠标也不是刚需,没有也能忍。感谢 OP 开发的这个好工具!
|
10
LonnyWong OP @devoteever 压缩完之后是二进制,有非常多的特殊符号,base64 编码之后就没有特殊符号了。
之所以用 base64 ,是因为要 escape 的特殊符号有些多,每个特殊符号 escape 之后就变成两个字节。当特殊符号超过 85 个,还不如 base64 来的效果更好。[128 - 255] 这些字符,我不是很确定 tmux 会不会 100% 兼容,都当成是特殊字符算了,至少 tmux 是兼容 base64 这些可见字符的。 |
11
dreamramon 2023-05-01 08:57:54 +08:00
这种东西是不是用 rust 写比较好,go 的都很慢。
|
12
acerphoenix 2023-05-01 10:49:55 +08:00
试过两次,都是因为 trzsz 得分别适配对应终端,这个确实太麻烦了。我用 windterm ,如果作者有闲跟进,不胜感激。
|
13
LonnyWong OP @dreamramon 其实都差不多,go 和 rust 都很快,编译后差别不会有多少。
|
14
LonnyWong OP @acerphoenix windterm 是 c 写的,首先需要 windterm 的作者愿意合入,然后也要用 c 写个 trzsz 的库,暂时还没空搞。
|