lynan
V2EX  ›  浏览器

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

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

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

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

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

    不完全的话,可以搞个服务(不管是不是人肉)做个 signal server ,然后走 webrtc 。
    killva4624
    killva4624
    Oct 25, 2022
    29
    理论上是可以的。
    对端发现:靠手动填 IP ,或者广播自己的地址给特定端口(我记得以前有个叫 FeiQ )的。
    kwh
    kwh
    Oct 25, 2022
    30
    可以吧???我就通过 ipv6 地址从互联网访问到了我电脑本地。
    yueji
    yueji
    Oct 25, 2022
    31
    php websocket 开端口 + 扫同网段 相同端口
    谁先扫到就 connect
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4919 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 08:03 · PVG 16:03 · LAX 00:03 · JFK 03:03
    ♥ Do have faith in what you're doing.