V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
molika
V2EX  ›  程序员

开源一个自己写的基于 WebRTC 传输的在线站。

  •  
  •   molika · 2025 年 8 月 5 日 · 3725 次点击
    这是一个创建于 165 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前几天一直在线传文件,后面就想着自己弄一个。 WebRTC 也更加放心。 这次直接体验了一把 nextjs + go 。 构建出来的文件直接单文件部署即可,前端资源也一并在二进制包。非常 nice 。 -port z 指定端口

    目前已经实现了 文件传输。 桌面共享 开发中。

    开源地址 https://github.com/MatrixSeven/file-transfer-go

    体验地址 https://transfer.52python.cn/

    佬们可以 star 或者拍代码(大部分 AI ) 哈哈哈

    第 1 条附言  ·  2025 年 8 月 5 日
    ws 是为了交换 ICE 打洞数据,然后传输走 webrtc 点到点直接传输, 你传输的数据不会经过我的服务器,是你的两个设备直连。不过有些地方 nat 网络比较严格 可能会打洞简历点到点链接失败,这样就没法传输了。

    数据不会经过服务器 不吃我的带宽,所以大家随便搞哈哈哈
    代码开源,不放心可也审查。
    51 条回复    2025-08-07 14:17:37 +08:00
    molika
        1
    molika  
    OP
       2025 年 8 月 5 日
    文字和桌面还是适配。目前只能文件
    hellodigua
        2
    hellodigua  
       2025 年 8 月 5 日
    有点牛,请问下文件不经过中转服务器,是点对点传输吗?
    hellodigua
        3
    hellodigua  
       2025 年 8 月 5 日
    你这个整一个正式的域名,我甚至愿意保存长期使用
    yiroonli
        4
    yiroonli  
       2025 年 8 月 5 日
    支持
    molika
        5
    molika  
    OP
       2025 年 8 月 5 日
    @hellodigua 是的 数据不经过我的服务器,通过打洞然后点到点直传,不然你传个文件 我带宽都爆掉了哈哈哈。
    molika
        6
    molika  
    OP
       2025 年 8 月 5 日
    @hellodigua 不出意外 会一致挂着。 就这个域名。
    molika
        7
    molika  
    OP
       2025 年 8 月 5 日
    @yiroonli 感谢大佬 打破 0 回复了
    andyskaura
        8
    andyskaura  
       2025 年 8 月 5 日
    我有做一个类似的,不感觉方向都走错了,没你这个直观。explorer.kuraa.cc
    molika
        9
    molika  
    OP
       2025 年 8 月 5 日
    @andyskaura 侧重点不一样,我这个就是传文件。用啥传啥就完事了
    Smilencer
        10
    Smilencer  
       2025 年 8 月 5 日
    https://boardrop.app/
    局域网互传也是走的 WebRTC
    WebRTC 走不通,临时互传个文字图片也可以
    TimPeake
        11
    TimPeake  
       2025 年 8 月 5 日
    界面看着有点 tailwindcss 风
    cat
        12
    cat  
       2025 年 8 月 5 日
    试了一下,没打通
    skiy
        13
    skiy  
       2025 年 8 月 5 日
    我现在用 croc 命令行传。。。
    wKong753900
        14
    wKong753900  
       2025 年 8 月 5 日
    哈哈,我去年也有这么个想法,写开源项目写到一半就没继续了
    sujin190
        15
    sujin190  
       2025 年 8 月 5 日
    不搞个生成二维码
    blankmiss
        16
    blankmiss  
       2025 年 8 月 5 日
    打不通一点
    realpg
        17
    realpg  
    PRO
       2025 年 8 月 5 日
    神仙应用 star 了 打算忙完自己搭建一个

    可不可以 feature request?

    后端加个配置项
    allowTextRelay: false,
    allowPictureRelay: false,
    pictureRelaySizeLimit: 102400,

    然后前端对应实现一下
    molika
        18
    molika  
    OP
       2025 年 8 月 5 日
    @blankmiss 和 NAT 网络有关系, 我这里没有搭建中续服务器,所以打洞失败会直接失败,而不是降级使用中续。因为我最初就认为用这个 p2p 其实是为了不过服务器。
    molika
        19
    molika  
    OP
       2025 年 8 月 5 日
    @blankmiss 和 NAT 网络有关系, 我这里没有搭建中续服务器,所以打洞失败会直接失败,而不是降级使用中续。因为我最初就认为用这个 p2p 其实是为了不过服务器。!!!
    molika
        20
    molika  
    OP
       2025 年 8 月 5 日
    @cat 和 NAT 网络有关系, 我这里没有搭建中续服务器,所以打洞失败会直接失败,而不是降级使用中续。因为我最初就认为用这个 p2p 其实是为了不过服务器。
    molika
        21
    molika  
    OP
       2025 年 8 月 5 日
    @sujin190 加入 TODO 有时间推上去。我自己也有用,也算是自己的需求了哈
    molika
        22
    molika  
    OP
       2025 年 8 月 5 日
    @wKong753900 一无所知,到现在 其实很快,了解原理 就可以 pua ai 启动了
    molika
        23
    molika  
    OP
       2025 年 8 月 5 日
    @realpg 完全可以。
    ShundL
        24
    ShundL  
       2025 年 8 月 5 日
    已 star
    crime1024
        25
    crime1024  
       2025 年 8 月 5 日
    这种写法是不是有个问题,毕竟返回的是指针,那么锁只在函数体内有效,正确的用法不应该返回数据的副本吗?
    undefinedsymbol
        26
    undefinedsymbol  
       2025 年 8 月 5 日
    界面不错,不过试了一下,失败了,这类应用感觉如果想做好,最终还是需要走服务器,不过走服务器又会涉及到隐私问题了。。。
    itechify
        27
    itechify  
    PRO
       2025 年 8 月 5 日
    来个 docker 镜像及 compose 模板
    baichi
        28
    baichi  
       2025 年 8 月 5 日
    域名 52python 然后项目一行 python 都没有 😑
    caocong
        29
    caocong  
       2025 年 8 月 5 日
    我自己练手也写了类似的小工具使用 webrtc 同步文本、传输文件、共享屏幕,op 这个界面和我用 ai 生成的风格好相似,我个人目标是尽量避免搭建信令服务器做成纯前端的东西,如果是纯局域网内可以实现,跨网够呛,而且 stun 服务器使用公用公开的服务器的能力很有限,不如自己搭的
    molika
        30
    molika  
    OP
       2025 年 8 月 5 日
    @sujin190 已支持
    Tink
        31
    Tink  
    PRO
       2025 年 8 月 5 日
    我这几天也糊了一个,能用

    https://f.110x.de/
    tengyoubiao
        32
    tengyoubiao  
       2025 年 8 月 5 日
    界面写的很好,我学习 webrtc 之后发现信令服务器、打洞和中继都需要单独做服务,从实用的角度看还是用网盘方便
    kuxiaobai
        33
    kuxiaobai  
       2025 年 8 月 5 日
    试用了一下,接收文件不成功,有可能是我把浏览器的 webrtc 功能给关闭了
    le4tim
        34
    le4tim  
       2025 年 8 月 6 日 via Android
    请问啊,webrtc 打洞,有一端如果是对称型的,webrtc 能实施生日悖论的端口碰转吗?就是用变换源端口去发几百个 udp 包?或者变换目的端口发几百个包
    lidedongsn
        35
    lidedongsn  
       2025 年 8 月 6 日
    webrtc tcp 模式
    abolast
        36
    abolast  
       2025 年 8 月 6 日
    @Tink 我倒是对你糊的这个感兴趣,简洁。啥时候开源一下看看代码哈哈哈哈哈
    Satansickle
        37
    Satansickle  
       2025 年 8 月 6 日
    WebRTC 传输的必须条件是什么?试了好几个网络都失败
    Tink
        38
    Tink  
    PRO
       2025 年 8 月 6 日   ❤️ 1
    @abolast #36 已经开源过了,但是代码很烂,自己写的就不行,再加上 llm 一顿输出,凑活看吧。我这个比较特殊的一点是支持通过 cli 进行文件传输,cli 下只能走中转,因为 cli 下的 webrtc 很难搞。

    https://github.com/goxofy/P2P-File-Transfer-WebRTC
    abolast
        39
    abolast  
       2025 年 8 月 6 日
    @Tink 发现了你的 Web Clipper ,这个好用
    Tink
        40
    Tink  
    PRO
       2025 年 8 月 6 日
    @abolast #39 欢迎使用
    testliyu
        41
    testliyu  
       2025 年 8 月 6 日
    跨网络之间就没办法使用了
    snow0
        42
    snow0  
       2025 年 8 月 6 日
    学习了下。对于手机的 4G/5G 移动数据上网(几乎 100%是对称型 NAT ),不提供 TURN 中转服务的话几乎 100%会失败,对吗
    molika
        43
    molika  
    OP
       2025 年 8 月 6 日
    @snow0 嗯嗯,依赖 nat 类型,但是我手机和电脑互传是没啥问题的。可能看地区。 ,不提供 TURN 中转服务,因为初心就是不过服务器。
    molika
        44
    molika  
    OP
       2025 年 8 月 6 日
    @testliyu 跨网络依赖于你所在网络的 NAT 模型。 对称型 NAT 基本没希望了。
    molika
        45
    molika  
    OP
       2025 年 8 月 6 日
    @Tink cli 下支持 这个厉害了
    molika
        46
    molika  
    OP
       2025 年 8 月 6 日
    @Satansickle nat 模型
    完全锥形 NAT ( Full Cone NAT ):所有外部请求都可以直接映射到内网设备,穿越最简单。
    地址限制锥形 NAT ( Address-Restricted Cone NAT ):只允许来自已知 IP 的外部请求。
    端口限制锥形 NAT ( Port-Restricted Cone NAT ):只允许来自已知 IP 和端口的请求。
    对称 NAT ( Symmetric NAT ):为每个目标分配不同端口,点对点连接困难,需依赖 TURN 。

    对称 NAT 没法打洞~
    molika
        47
    molika  
    OP
       2025 年 8 月 6 日
    Wxh16144
        48
    Wxh16144  
       2025 年 8 月 6 日
    UI 不错,之前接触到一个「程序员小山与 Bug 」博主也写了一个类似的 https://github.com/sunzsh/internal-chat
    keven1024
        49
    keven1024  
       2025 年 8 月 6 日
    我也晒晒我的开源项目 015 ,golang+vue(nuxt3),和 op 的功能差不多,但是 op 的传输方案是用 webrtc ,我这边用的是服务器存储.

    我的项目相比 op 的优势在于我这个支持分片上传和秒传,对有大文件上传需求的用户更友好

    https://github.com/keven1024/015


    第二个优势是项目可扩展,目前基建差不多了,包括队列系统什么的,支持在原有文件上传基础上扩展新功能,现在加了一个图片压缩,未来会陆续加一些图片超分辨率,图片去背景等这种一次性场景的功能

    molika
        50
    molika  
    OP
       2025 年 8 月 7 日
    @keven1024 就是为了不过服务器 所以才用 p2p 需求一样。 但是可能大部分不在乎这些。
    molika
        51
    molika  
    OP
       2025 年 8 月 7 日
    @Wxh16144 不错
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2950 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:10 · PVG 15:10 · LAX 23:10 · JFK 02:10
    ♥ Do have faith in what you're doing.