5

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

 1 year ago
source link: https://www.v2ex.com/t/889611
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  浏览器

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

  lynan · 11 小时 15 分钟前 · 2636 次点击

第 1 条附言  ·  6 小时 56 分钟前

31 条回复    2022-10-25 18:48:15 +08:00
registerrr

registerrr      11 小时 11 分钟前

webrtc
seth19960929

seth19960929      11 小时 8 分钟前

@registerrr 你这个也需要服务端返回 JS 去执行吧
我猜楼主是说完全不需要服务端的. 我能想到的估计也就 c2c 内网有可能
thinkershare

thinkershare      11 小时 7 分钟前

wangtian2020

wangtian2020      11 小时 1 分钟前

webrtc
看哔哩哔哩直播的时候,如果用户的浏览器支持 webrtc ,哔哩哔哩会控制在用户之间 P2P 节约大量视频带宽
通信传送视频信息,和传送文本数据是一样的
ysc3839

ysc3839      10 小时 58 分钟前

WebRTC 的 P2P 模式好像也要服务器转发一些数据才能建立连接的。
kuro1

kuro1      10 小时 55 分钟前

duke807

duke807      10 小时 54 分钟前

serverless-webrtc
NessajCN

NessajCN      10 小时 50 分钟前

@seth19960929 理论上是可以的,你本地写 html+js 脚本,手动生成一个 sdp 作为 offer 。再去另一个浏览器那里把 offer 的 sdp 复制粘贴过来写死在 js 代码里生成 answer 。再把 answer 的 sdp 复制粘贴到 offer 那里,就能连上了。不需要服务端..
diegozhu

diegozhu      10 小时 29 分钟前

@NessajCN 你这自己相当于是一个服务器端。
nVic

nVic      10 小时 20 分钟前

网络环境?内网?大内网?公网?互联网?中间有没有单独的 dns 服务器?
yufeng0681

yufeng0681      10 小时 5 分钟前

访问同一个网址, 然后在网址上的文本框里 聊天
比如:
1 、在 在线 excel 的表格里面聊天
2 、在 在线 word 文档里聊天
3 、可以在博客留言区聊天(不实时,可能会被其他人看到)
SunsetShimmer

SunsetShimmer      9 小时 55 分钟前

个人认为,除非两端都在公网且知道对方的 IP ,否则总会有一个中转(利用公开服务)。
ClericPy

ClericPy      9 小时 27 分钟前 via Android

火狐当年貌似有个类似的东西... 你通信干嘛
hoshan185

hoshan185      9 小时 21 分钟前

那这样两端里面起码要有一个可以在公网上访问的吧
jeesk

jeesk      9 小时 6 分钟前

不行, 首先浏览器必须走网络协议, 那么这个网路协议怎么来, 需要网络吧, 那么就需要第三方服务器(路由器也是)? 如果是 app 之间可以尝试 wifi direct 或者蓝牙 p2p .
ArthurSS

ArthurSS      7 小时 44 分钟前

@NessajCN 你这 sdp 还是要走信令服务器的
NessajCN

NessajCN      7 小时 32 分钟前

@ArthurSS 我这都手动复制粘贴了哪里还需要 signaling ,我自己就是 signaling 呀
cy1027

cy1027      7 小时 29 分钟前

单从通信的原理上来讲,你纯内网的可以广播建立链接,只要你是内网到外网,没有第三方怎么建立链接呢?
jones2000

jones2000      7 小时 4 分钟前

做插件点对点值连, 局域网可以用命名管道或 udp 广播。
meeop

meeop      6 小时 48 分钟前

有的,我最近正在写这方面的库
首先要抽象一下,是不是浏览器不重要,这个问题是如何实现两个客户端之间直连

分场景:
1 内网环境或者有公网 ip 或者可直连 ipv6,两个客户端直接拿对方 ip 端口连接就行
2nat 网络类型支持内网穿透(通常都支持),需要一个中介服务器协调 nat 穿透,客户端之间连接成功后就是直连,不需要中介服务器了.这个中介服务器如果是 stun 协议的话,可以自荐,网上也有免费的
3 最差的情况无法穿透 nat 直连,就需要代理,有很多种协议,这种一定需要一个服务器做转发
4 相对成熟解决方案就是 webrtc,这个原理就是上述 123 的整合,需要自建服务器端
5 通解还是需要有公网 ip(v4 或者 v6)
ArthurSS

ArthurSS      6 小时 47 分钟前

@NessajCN 可是你不知道对方 ip ,如何连?你的 sdp 本质上也是要通过 TURN 服务去中转吧,类似#13 所说
ArthurSS

ArthurSS      6 小时 46 分钟前

@NessajCN 参考#21 说的也行,现在网上公开的库,都是内置了一个
julyclyde

julyclyde      6 小时 20 分钟前

mDNS 可以相互发现

我不懂怎么在浏览器里“监听”
xiqishow

xiqishow      6 小时 16 分钟前

@xiqishow #25 可以在局域网里 互相传文件 也是 mdns 的实现吧
NessajCN

NessajCN      6 小时 7 分钟前

@ArthurSS turn 是另外一码事了,跟 signaling 没关系。sdp 里面包含了 ip ,只是这个 ip 如果无法从公网访问那自然是连不通的需要走 turn 。不过楼主都说了内网了那就不存在需要 turn 中转啊,两边 sdp 都是内网 ip ,本来就能互相连通。
flyqie

flyqie      3 小时 11 分钟前 via Android

这得看你是不是要求完全不用服务端(人肉也算)。

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

不完全的话,可以搞个服务(不管是不是人肉)做个 signal server ,然后走 webrtc 。
killva4624

killva4624      3 小时 3 分钟前

理论上是可以的。
对端发现:靠手动填 IP ,或者广播自己的地址给特定端口(我记得以前有个叫 FeiQ )的。
kwh

kwh      3 小时 1 分钟前

可以吧???我就通过 ipv6 地址从互联网访问到了我电脑本地。
yueji

yueji      2 小时 55 分钟前

php websocket 开端口 + 扫同网段 相同端口
谁先扫到就 connect

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK