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

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

  •  1
     
  •   YUX
    PRO
    YUX 54 天前 4506 次点击
    这是一个创建于 54 天前的主题,其中的信息可能已经有所发展或是发生改变。
     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
    34 条回复    2025-11-14 17:41:45 +08:00
    dreamk
        1
    dreamk  
       54 天前   2
    经典米氏对比法。zig 用户最爱炫的这句 zero dependencies 不是生态不足的表现吗
    YUX
        2
    YUX  
    OP
    PRO
       54 天前
    @dreamk 也是爽点
    tinkerer
        3
    tinkerer  
       54 天前
    对比的话应该再加上 cpu, mem 使用情况
    tinybaby365
        4
    tinybaby365  
       54 天前
    加密算法不一样,性能数据就没有比较的意义
    Judoon
        5
    Judoon  
       54 天前   1
    floo-aarch64-linux-gnu.tar.gz 在树莓派 5 ( Debian 12 )上跑不起来: "Illegal instruction"

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

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

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

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

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

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

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

    跟 frp 及 rathole 的不相上下了
    Hansah
        23
    Hansah  
       53 天前
    @YUX #21 就单纯的办公室通过阿里云公网服务器中转回家里的 nas ,因为广西联通没公网了,FRP 配置太复杂,rathole 稳得一笔
    YUX
        24
    YUX  
    OP
    PRO
       52 天前
    @Hansah 可以麻烦你测试一下吗,我自己的测试场景比较简单,连树莓派,还有阿里云连家里的 emby ,希望有反馈。
    Hansah
        25
    Hansah  
       52 天前
    @YUX #24 行,我晚上研究下
    YUX
        26
    YUX  
    OP
    PRO
       51 天前
    @96368a
    5waker
        27
    5waker  
       48 天前
    我很好奇,用 zig vibe coding 好用吗?容易出正确代码吗?
    YUX
        28
    YUX  
    OP
    PRO
       48 天前
    @5waker 因为 zig 小版本 break change 比较多 所以一开始会有编译不过去的问题,但编译不过去之后会意识到当前版本,然后能自行纠正,总体来说问题不大。这个项目最开始是自己手写的,之后 ai 配合着改了很多。
    ccc00
        29
    ccc00  
       47 天前
    请问 floo 在国内云服务器上使用有风险吗?
    YUX
        30
    YUX  
    OP
    PRO
       47 天前
    @ccc00 我只在阿里云上一直用 没啥问题
    ccc00
        31
    ccc00  
       46 天前
    @YUX 感谢回复,阿里云是国内的吗?我最近才被腾运云封了一个服务器,不知道怎么开了 sock5 ,还访问了 google
    YUX
        32
    YUX  
    OP
    PRO
       46 天前
    @ccc00 国内的,可能是 floo 之前一直是我自己在用 没有遇到什么问题 当然主要还是取决于你用来做什么
    ccc00
        33
    ccc00  
       46 天前
    @YUX 其实我也没做什么
    ksedz
        34
    ksedz  
       46 天前
    说 0 依赖没意义的能不能歇一歇。

    商业使用不止要考虑包的 license ,还要考虑依赖包的 license 。
    还有防止恶意代码和深度定制的相关需求,都会优先考虑 0 依赖的库。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3177 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 04:34 PVG 12:34 LAX 20:34 JFK 23:34
    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