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

2022-10-25 10:28:57 +08:00
 lynan
如题~
4877 次点击
所在节点    浏览器
31 条回复
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
2022-10-25 14:56:36 +08:00
@NessajCN 可是你不知道对方 ip ,如何连?你的 sdp 本质上也是要通过 TURN 服务去中转吧,类似#13 所说
ArthurSS
2022-10-25 14:57:57 +08:00
@NessajCN 参考#21 说的也行,现在网上公开的库,都是内置了一个
julyclyde
2022-10-25 15:23:48 +08:00
mDNS 可以相互发现

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

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

不完全的话,可以搞个服务(不管是不是人肉)做个 signal server ,然后走 webrtc 。
killva4624
2022-10-25 18:40:14 +08:00
理论上是可以的。
对端发现:靠手动填 IP ,或者广播自己的地址给特定端口(我记得以前有个叫 FeiQ )的。
kwh
2022-10-25 18:42:07 +08:00
可以吧???我就通过 ipv6 地址从互联网访问到了我电脑本地。
yueji
2022-10-25 18:48:15 +08:00
php websocket 开端口 + 扫同网段 相同端口
谁先扫到就 connect

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/889611

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX