V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lynan
V2EX  ›  浏览器

有办法不通过额外的服务端,在两个浏览器间建立连接进行通信吗

  •  
  •   lynan · 104 天前 · 3653 次点击
    这是一个创建于 104 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题~
    第 1 条附言  ·  104 天前
    是内网~
    31 条回复    2022-10-25 18:48:15 +08:00
    registerrr
        1
    registerrr  
       104 天前
    webrtc
    seth19960929
        2
    seth19960929  
       104 天前
    @registerrr 你这个也需要服务端返回 JS 去执行吧
    我猜楼主是说完全不需要服务端的. 我能想到的估计也就 c2c 内网有可能
    thinkershare
        3
    thinkershare  
       104 天前
    没有办法
    wangtian2020
        4
    wangtian2020  
       104 天前
    webrtc
    看哔哩哔哩直播的时候,如果用户的浏览器支持 webrtc ,哔哩哔哩会控制在用户之间 P2P 节约大量视频带宽
    通信传送视频信息,和传送文本数据是一样的
    ysc3839
        5
    ysc3839  
       104 天前
    WebRTC 的 P2P 模式好像也要服务器转发一些数据才能建立连接的。
    kuro1
        6
    kuro1  
       104 天前
    mDNS
    duke807
        7
    duke807  
       104 天前
    serverless-webrtc
    NessajCN
        8
    NessajCN  
       104 天前
    @seth19960929 理论上是可以的,你本地写 html+js 脚本,手动生成一个 sdp 作为 offer 。再去另一个浏览器那里把 offer 的 sdp 复制粘贴过来写死在 js 代码里生成 answer 。再把 answer 的 sdp 复制粘贴到 offer 那里,就能连上了。不需要服务端..
    diegozhu
        9
    diegozhu  
       104 天前
    @NessajCN 你这自己相当于是一个服务器端。
    nVic
        10
    nVic  
       104 天前
    网络环境?内网?大内网?公网?互联网?中间有没有单独的 dns 服务器?
    yufeng0681
        11
    yufeng0681  
       104 天前
    访问同一个网址, 然后在网址上的文本框里 聊天
    比如:
    1 、在 在线 excel 的表格里面聊天
    2 、在 在线 word 文档里聊天
    3 、可以在博客留言区聊天(不实时,可能会被其他人看到)
    SunsetShimmer
        13
    SunsetShimmer  
       104 天前
    个人认为,除非两端都在公网且知道对方的 IP ,否则总会有一个中转(利用公开服务)。
    ClericPy
        14
    ClericPy  
       104 天前 via Android
    火狐当年貌似有个类似的东西... 你通信干嘛
    hoshan185
        15
    hoshan185  
       104 天前
    那这样两端里面起码要有一个可以在公网上访问的吧
    jeesk
        16
    jeesk  
       104 天前
    不行, 首先浏览器必须走网络协议, 那么这个网路协议怎么来, 需要网络吧, 那么就需要第三方服务器(路由器也是)? 如果是 app 之间可以尝试 wifi direct 或者蓝牙 p2p .
    ArthurSS
        17
    ArthurSS  
       104 天前
    @NessajCN 你这 sdp 还是要走信令服务器的
    NessajCN
        18
    NessajCN  
       104 天前
    @ArthurSS 我这都手动复制粘贴了哪里还需要 signaling ,我自己就是 signaling 呀
    cy1027
        19
    cy1027  
       104 天前
    单从通信的原理上来讲,你纯内网的可以广播建立链接,只要你是内网到外网,没有第三方怎么建立链接呢?
    jones2000
        20
    jones2000  
       104 天前
    做插件点对点值连, 局域网可以用命名管道或 udp 广播。
    meeop
        21
    meeop  
       104 天前
    有的,我最近正在写这方面的库
    首先要抽象一下,是不是浏览器不重要,这个问题是如何实现两个客户端之间直连

    分场景:
    1 内网环境或者有公网 ip 或者可直连 ipv6,两个客户端直接拿对方 ip 端口连接就行
    2nat 网络类型支持内网穿透(通常都支持),需要一个中介服务器协调 nat 穿透,客户端之间连接成功后就是直连,不需要中介服务器了.这个中介服务器如果是 stun 协议的话,可以自荐,网上也有免费的
    3 最差的情况无法穿透 nat 直连,就需要代理,有很多种协议,这种一定需要一个服务器做转发
    4 相对成熟解决方案就是 webrtc,这个原理就是上述 123 的整合,需要自建服务器端
    5 通解还是需要有公网 ip(v4 或者 v6)
    ArthurSS
        22
    ArthurSS  
       104 天前
    @NessajCN 可是你不知道对方 ip ,如何连?你的 sdp 本质上也是要通过 TURN 服务去中转吧,类似#13 所说
    ArthurSS
        23
    ArthurSS  
       104 天前
    @NessajCN 参考#21 说的也行,现在网上公开的库,都是内置了一个
    julyclyde
        24
    julyclyde  
       104 天前
    mDNS 可以相互发现

    我不懂怎么在浏览器里“监听”
    xiqishow
        25
    xiqishow  
       104 天前
    xiqishow
        26
    xiqishow  
       104 天前
    @xiqishow #25 可以在局域网里 互相传文件 也是 mdns 的实现吧
    NessajCN
        27
    NessajCN  
       104 天前
    @ArthurSS turn 是另外一码事了,跟 signaling 没关系。sdp 里面包含了 ip ,只是这个 ip 如果无法从公网访问那自然是连不通的需要走 turn 。不过楼主都说了内网了那就不存在需要 turn 中转啊,两边 sdp 都是内网 ip ,本来就能互相连通。
    flyqie
        28
    flyqie  
       104 天前 via Android
    这得看你是不是要求完全不用服务端(人肉也算)。

    完全不用的话,如果你不能通过各种奇怪的方式(浏览器插件什么的)开一个可被内网访问的固定服务端口,那无解。

    不完全的话,可以搞个服务(不管是不是人肉)做个 signal server ,然后走 webrtc 。
    killva4624
        29
    killva4624  
       104 天前
    理论上是可以的。
    对端发现:靠手动填 IP ,或者广播自己的地址给特定端口(我记得以前有个叫 FeiQ )的。
    kwh
        30
    kwh  
       104 天前
    可以吧???我就通过 ipv6 地址从互联网访问到了我电脑本地。
    yueji
        31
    yueji  
       104 天前
    php websocket 开端口 + 扫同网段 相同端口
    谁先扫到就 connect
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2992 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 00:53 · PVG 08:53 · LAX 16:53 · JFK 19:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.