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

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

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

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

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

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

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