基于 cloudflare durable object 的 p2p 中转方案,仅思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
defaw
V2EX    程序员

基于 cloudflare durable object 的 p2p 中转方案,仅思路

  •  
  •   defaw 7 天前 1106 次点击

    首先说下 durable object 中转的优势

    • 可以使用 cf 全球 330 个城市的机房部署你的中转实例,除了中国,用户到中转服务器的延迟不会高于 20ms 。给一组我实测的数据,测了两个位置,在 scaleway 的法国机房,延迟 16ms ,在腾讯云香港机房,延迟 10ms 。
    • do 按运行时间计费,不按流量计费,因此假设你将每一条中转信道都分配独立的 do 实例,那么你可以得到一个比较完美的收费模型,基于每条信道的存活时间收费,这对 toC 或者 SaaS 都是可接受的。
    • 流量免费,do 通过 worker 的 websocket 对外暴露端点,worker 的流量是不计费的
    • 自动水平扩展,do 实例拉起是秒级并且基本不做数量限制的

    下面说下实现思路

    worker 对外暴露 websocket 连接,worker 内部把 websocket 连接转成 streamable http 和 do 通信

    worker 对外暴露 websocket 连接,一个是为了实时性,一个是为了规避 worker 上传请求体 100MB 大小限制 worker 对 do 的连接转成 streamable http 则是为了优化 do 的计费机制,do 对 websocket 的计费是按流入方向每 20 个 packet 折算成一次调用收费,但是如过你用 streamable http ,一个请求就是一个请求。同时让 worker 和 do 实例发起一个 websocket 连接,这是为了保活 do 实例,do 实例在你的请求返回后会自动销毁,所以你需要一个保活的 websocket 连接到 do 。

    我已经在一些应用场景测试了这个中转信道

    • 端到端加密的即时通信,所有痕迹随着 do 销毁全部消失
    • 一对一视频通话,我用的香港节点去创建中转信道,因此我猜测 do 实例是在 cf 的香港机房,延迟在 2-3s
    4 条回复    2026-02-12 00:53:41 +08:00
    LnTrx
        1
    LnTrx  
       7 天前
    defaw
        2
    defaw  
    OP
       7 天前
    @LnTrx 这个实现有很大的问题,流量是计费的
    bear330
        3
    bear330  
       6 天前
    如果您是想找 p2p 工具, 要不试试我的? 也流量免费的 https://github.com/nuwainfo/ffl
    IceSoulHanxi
        4
    IceSoulHanxi  
       3 天前 via Android
    可以看看我之前用大模型搓的基于 cf do 的 easytier 组网工具的服务端,支持 p2p 也支持走 do 中转
    https://github.com/IceSoulHanxi/easytier-ws-relay
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1990 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:04 PVG 11:04 LAX 19:04 JFK 22: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