我用 Zig 重写(并重新设计)了 frp 和 rathole

3 天前
 YUX
███████╗██╗      ██████╗  ██████╗
██╔════╝██║     ██╔═══██╗██╔═══██╗
█████╗  ██║     ██║   ██║██║   ██║
██╔══╝  ██║     ██║   ██║██║   ██║
██║     ███████╗╚██████╔╝╚██████╔╝
╚═╝     ╚══════╝ ╚═════╝  ╚═════╝


Dependencies:  Floo      ∅ (zero)          ⭐
               Rathole   ████████████████████████████ (27+ crates)
               FRP       █████████████████████████████████ (34+ packages)

Binary Size:   Floo      ▌ 671 KB total (394 KB + 277 KB)  ⭐
               Rathole   ████ ~2-4 MB total
               FRP       ████████████████████████████████ ~24+ MB total

Throughput:    Floo      ██████████████████████████████ 29.4 Gbps ⭐
               Rathole   ██████████████████ 18.1 Gbps
               FRP       ██████████ 10.0 Gbps

floo

floo github

最近尝试了一下 vibe coding ,在整理一些之前自己写过的一些小工具,有很多没有发出来是因为从一个自己用的工具到一个公开的,可能对很多人有用的工具之间,有一些我不太擅长处理的步骤,比如写一个好看的 README ,写一个好看的介绍页面,研究一下 GitHub 的一些新操作,就像是快递的最后一公里。最近订阅了一下 codex 和 claude code ,正好把这部分工作完成了,当然还有一些代码审查,单元测试等繁琐的工作。

Feature Floo Rathole FRP
Language Zig Rust Go
Dependencies 0 27+ crates 34+ packages
Max Throughput (M1) 29.4 Gbps 18.1 Gbps 10.0 Gbps
vs Rathole +62% faster baseline -45% slower
vs FRP +194% faster +81% faster baseline
Encryption Noise XX + PSK Noise NK, TLS, WS TLS
Ciphers 5 AEAD (AEGIS, AES-GCM, ChaCha20) ChaCha20-Poly1305 TLS standard
TCP Forwarding
UDP Forwarding
Multi-Service ✅ Per tunnel ✅ Per tunnel ✅ Per process
Parallel Tunnels ✅ Round-robin (1-16) 🔶 Not documented ✅ Connection pool
Token Auth ✅ Per-service + default ✅ Per-service + default ✅ Global + OIDC
Hot Config Reload ✅ SIGHUP (both) ✅ Dynamic services ✅ Admin API
Heartbeat ✅ Configurable ✅ Configurable ✅ Configurable
Auto-Reconnect ✅ Exponential backoff ✅ Exponential backoff ✅ Reconnection
Built-in Diagnostics --doctor, --ping 🔶 Logging only ✅ Dashboard, Prometheus
Config Format TOML TOML TOML, INI, YAML
CLI Overrides ✅ Port, host, target, proxy 🔶 Limited ✅ Via flags
IPv6 Support
Proxy Client ✅ SOCKS5, HTTP CONNECT ✅ SOCKS5, HTTP ✅ HTTP, SOCKS5
Compression ❌ Planned
HTTP Features ✅ Virtual hosts, auth
P2P Mode ✅ XTCP, STCP
Load Balancing ✅ Round-robin tunnels 🔶 Not documented ✅ Multiple backends
Binary Size 394 KB + 277 KB ~1-2 MB each ~12-13 MB compressed
Platform macOS, Linux (Windows planned) Linux, macOS, Windows All platforms
1893 次点击
所在节点    分享创造
25 条回复
dreamk
3 天前
经典米氏对比法。zig 用户最爱炫的这句 zero dependencies 不是生态不足的表现吗
YUX
3 天前
@dreamk 也是爽点
tinkerer
3 天前
对比的话应该再加上 cpu, mem 使用情况
tinybaby365
3 天前
加密算法不一样,性能数据就没有比较的意义
Judoon
3 天前
floo-aarch64-linux-gnu.tar.gz 在树莓派 5 ( Debian 12 )上跑不起来: "Illegal instruction"

但在 macos m4 上的 aarch64 linux 虚拟机里面能跑
yb2313
3 天前
好怪, 你的 gh 账户看起来又新又旧的
Aixtuz
3 天前
说实话,就个人使用的话,表中有不少元素感觉不到影响,也压根不在乎。
反而更在意:简单、够用、稳定。
ahu
3 天前
看起来不错!

尽快把中文文档什么的完善一下,估计会有更多用户 :)
bxb100
3 天前
UP 现在 zig 写多线程爽不爽啊, 心智负担如何
YUX
3 天前
@Judoon GitHub Actions 的脚本改过来了。floo-aarch64-linux-gnu-rpi.tar.gz

@ahu 完善了一下配置示例,应该比较易用
YUX
3 天前
@bxb100 没有隐藏的 runtime , 没有 GC ,不会偷偷 spawn 线程 没有线程池框架,任务系统,纯裸多线程 有种纯粹的控制感,爽点在这。
因为实现很清晰,所以心智负担不重。非常 deterministic
可以等一手 0.16 的 async I/O 出来再看看
96368a
2 天前
P2P Mode 有计划实现吗
ahu
2 天前
@YUX #11 昨晚研究了一晚上,差点没用明白 😫 发现跟 FRP 很不一样。

我是直接在本机测试的。感觉 flooc.toml 的 local_port 概念有点反直觉。然后服务端和客户端都有 target_host 和 target_port 是不是太冗余了?
guotie
2 天前
zig 这性能确实是离谱了
guotie
2 天前
Dependencies 这一项 不需要拿来比较,没啥意义
bxb100
2 天前
@YUX #11 了解, 多谢回复
YUX
2 天前
@ahu 今天会再更新一个版本,简化配置
Hansah
2 天前
等于 floo 是 rathole 的复现?能无痛平移吗?一直在用 rathole 打洞
kuanat
2 天前
楼上说米氏对比法太逗了……

能具体说一下二进制文件体积的比较标准吗?因为我看这个项目里 build 设定里面是动态+strip 。

再就是原始 run_benchmarks 的结果有吗?从测试脚本看,这个更多是加密协议之间的对比。
YUX
2 天前
@ahu 现在更新了新版本,配置会比较符合直觉

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

https://ex.noerr.eu.org/t/1171005

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

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

© 2021 V2EX