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

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

  •  
  •   molika · 28 天前 · 3075 次点击

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

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

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

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

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

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

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

    可不可以 feature request?

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

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

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

    https://github.com/goxofy/P2P-File-Transfer-WebRTC
    abolast
        39
    abolast  
       27 天前
    @Tink 发现了你的 Web Clipper ,这个好用
    Tink
        40
    Tink  
    PRO
       27 天前
    @abolast #39 欢迎使用
    testliyu
        41
    testliyu  
       27 天前
    跨网络之间就没办法使用了
    snow0
        42
    snow0  
       27 天前
    学习了下。对于手机的 4G/5G 移动数据上网(几乎 100%是对称型 NAT ),不提供 TURN 中转服务的话几乎 100%会失败,对吗
    molika
        43
    molika  
    OP
       27 天前
    @snow0 嗯嗯,依赖 nat 类型,但是我手机和电脑互传是没啥问题的。可能看地区。 ,不提供 TURN 中转服务,因为初心就是不过服务器。
    molika
        44
    molika  
    OP
       27 天前
    @testliyu 跨网络依赖于你所在网络的 NAT 模型。 对称型 NAT 基本没希望了。
    molika
        45
    molika  
    OP
       27 天前
    @Tink cli 下支持 这个厉害了
    molika
        46
    molika  
    OP
       27 天前
    @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
       27 天前
    Wxh16144
        48
    Wxh16144  
       26 天前
    UI 不错,之前接触到一个「程序员小山与 Bug 」博主也写了一个类似的 https://github.com/sunzsh/internal-chat
    keven1024
        49
    keven1024  
       26 天前
    我也晒晒我的开源项目 015 ,golang+vue(nuxt3),和 op 的功能差不多,但是 op 的传输方案是用 webrtc ,我这边用的是服务器存储.

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

    https://github.com/keven1024/015


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

    molika
        50
    molika  
    OP
       26 天前
    @keven1024 就是为了不过服务器 所以才用 p2p 需求一样。 但是可能大部分不在乎这些。
    molika
        51
    molika  
    OP
       26 天前
    @Wxh16144 不错
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5386 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:07 · PVG 15:07 · LAX 00:07 · JFK 03:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.