V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
YUX
V2EX  ›  分享创造

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

  •  1
     
  •   YUX ·
    PRO
    ·
    YUX · 3 天前 · 1874 次点击
    ███████╗██╗      ██████╗  ██████╗
    ██╔════╝██║     ██╔═══██╗██╔═══██╗
    █████╗  ██║     ██║   ██║██║   ██║
    ██╔══╝  ██║     ██║   ██║██║   ██║
    ██║     ███████╗╚██████╔╝╚██████╔╝
    ╚═╝     ╚══════╝ ╚═════╝  ╚═════╝
    
    
    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
       2 天前   ❤️ 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
       1 天前
    @ahu 现在更新了新版本,配置会比较符合直觉
    YUX
        21
    YUX  
    OP
    PRO
       1 天前
    @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   ·   1072 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:43 · PVG 01:43 · LAX 09:43 · JFK 12:43
    ♥ Do have faith in what you're doing.