我用 Zig 重写(并重新设计)了 frp 和 rathole - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
YUX
V2EX    分享创造

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

  •  1
     
  •   YUX
    PRO
    YUX 3 天前 1922 次点击
     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
    25 条回复    2025-11-08 16:23:25 +08:00
    dreamk
        1
    dreamk  
       3 天前   2
    经典米氏对比法。zig 用户最爱炫的这句 zero dependencies 不是生态不足的表现吗
    YUX
        2
    YUX  
    OP
    PRO
       3 天前
    @dreamk 也是爽点
    tinkerer
        3
    tinkerer  
       3 天前
    对比的话应该再加上 cpu, mem 使用情况
    tinybaby365
        4
    tinybaby365  
       3 天前
    加密算法不一样,性能数据就没有比较的意义
    Judoon
        5
    Judoon  
       3 天前   1
    floo-aarch64-linux-gnu.tar.gz 在树莓派 5 ( Debian 12 )上跑不起来: "Illegal instruction"

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

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

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

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

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

    再就是原始 run_benchmarks 的结果有吗?从测试脚本看,这个更多是加密协议之间的对比。
    YUX
        20
    YUX  
    OP
    PRO
       2 天前
    @ahu 现在更新了新版本,配置会比较符合直觉
    YUX
        21
    YUX  
    OP
    PRO
       2 天前
    @Hansah 具体的使用场景是什么呢,可以尝试一下,一般来讲是可以的。
    ahu
        22
    ahu  
       1 天前
    @YUX #20 好快!

    我又把全部配置示例看了一遍,这下子确实舒服多了

    跟 frp 及 rathole 的不相上下了
    Hansah
        23
    Hansah  
       1 天前
    @YUX #21 就单纯的办公室通过阿里云公网服务器中转回家里的 nas ,因为广西联通没公网了,FRP 配置太复杂,rathole 稳得一笔
    YUX
        24
    YUX  
    OP
    PRO
       1 天前
    @Hansah 可以麻烦你测试一下吗,我自己的测试场景比较简单,连树莓派,还有阿里云连家里的 emby ,希望有反馈。
    Hansah
        25
    Hansah  
       1 天前
    @YUX #24 行,我晚上研究下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3128 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:04 PVG 08:04 LAX 16:04 JFK 19:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86