如何建立浏览器到浏览器(点对点)的连接?

IT技术 javascript html tcp p2p tcp-ip
2021-02-10 01:06:45

如何在客户端使用HTML5CSSJavaScript编写网站以便在页面加载后允许客户端浏览器之间的直接 tcp/ip 连接

我需要这样做以减少延迟,因为该站点将要求尽快将来自一个用户的输入传输到另一个用户,因此将数据从客户端 A 发送到服务器,然后再发送到客户端 B 是不好的选项。

我阅读了有关此主题的以前的帖子,但我找不到可用的解决方案/示例。据我所知,客户端之间的直接连接可以使用 Silverlight、Java 或 Flash 等插件建立。

有没有不需要插件的解决方案?我只想使用 JavaScript。

3个回答

Stackoverflow 上有几个关于浏览器中 P2P 连接的主题:

  1. HTML5 会允许网络应用程序建立点对点 HTTP 连接吗?
  2. 有哪些技术可以在浏览器中进行 P2P?
  3. HTML5 是否支持点对点(而不仅仅是 WebSockets)
  4. HTML5 Websockets 可以在不使用服务器的情况下直接连接 2 个客户端(浏览器)吗(P2P)
  5. 是否可以在 Web 浏览器中创建点对点连接?
  6. websockets 是否允许 p2p(浏览器到浏览器)通信?
  7. HTML 5 点对点视频的可能性?
  8. WebRTC 是否已在任何浏览器中实现?

正如大多数主题中所提到的,2008 年 HTML5 工作草案都有一个“点对点连接”部分:

W3C 工作草案 2009 年 2 月 12 日起,“点对点连接”部分消失了。但是这个 P2P 连接并没有消失。它在 WebRTC(实时通信)规范中以 PeerConnection 的名称重新命名:

自 2011 年 10 月 31 日起,W3C 编辑草案成为正式的工作草案:

PeerConnection(基于 UDP)的唯一实现存在于 Ericsson 实验室(2011 年 5 月)修改的 WebKit 中,它运行良好。一些补丁现在在 WebKit 中(2011 年 10 月——见下面的更新!):

此外,WebRTC 计划是 Google、Mozilla 和 Opera 的一个项目。因此,他们继续对 PeerConnection 进行规范:

Chrome(使用 WebKit)可能是第一个通过 PeerConnection 支持 WebRTC 的主要浏览器:

自 2012 年 1 月 18 日起,Chrome 也支持 WebRTC它可以在应用开发频道(在Windows,OSX和Linux)和金丝雀版本(Windows和OSX)下启用它chrome://flags它只支持MediaStream像视频和音频,可以用几个Demo进行测试到目前为止,不支持传输应用程序数据,如String/ ArrayBuffer/...。

2012 年 3 月 16 日起,WebRTC Editor's Draft分离出“点对点数据 API”来发送和接收通用应用程序数据(StringArrayBufferBlob)。Chromium 希望尽快实施数据 API(2012 年 4 月 10 日)。

4 月 3 日,Mozilla 也为 Firefox发布了第一个关于WebRTC 的工作示例

DataChannel 计划用于 Chrome 的第 25 版,在一个标志后面,同时它可以在 Firefox Nightly/Aurora(2012 年 12 月 12 日)中进行测试:

2018 年:DataChannels 仍处于实验阶段,但在当前版本的 Chrome 和 Firefox 中可用:

现在是 2014 年,你能用最近的进展更新你的优秀帖子吗?
2021-03-16 01:06:45
我会尽快做到的!
2021-03-31 01:06:45
现在是 2016 年在澳大利亚。我们可以获得浏览器点对点的最新链接吗?
2021-04-01 01:06:45
是啊,那个更新怎么样?
2021-04-05 01:06:45
@myroslav webrtc.org/interop是一个很好的起点。到目前为止,Firefox、Chrome 和 Opera 都提供了全面支持,并且可以与足够的适配器进行互操作。
2021-04-09 01:06:45

我不得不让你失望 - 目前仅使用 JavaScript 是不可能的。Websockets(和 Socket.IO)允许客户端和服务器之间的类似套接字的连接,但客户端之间不允许。您可以选择插件 - 无论是 Flash、Silverlight、Java 还是定制的。

您可以做的是使用 socket.io 并通过编写一个简单的代理服务器来模拟它。

从技术上讲,websockets 可以在任何地方使用。但是在浏览器中,由于安全限制,这不会发生。盖耶斯解释道。另请注意,此解决方案可能会更快,因为通常服务器放置在具有巨大带宽容量的地方,因此您的服务器可以很好地处理 100 个客户端,而使用真正的 p2p 时,您将很快使用户连接饱和。
2021-03-20 01:06:45
您确定 WebSocket 不允许两个浏览器之间的直接 p2p 吗?根据维基百科上的说法,它听起来像是可以:“WebSocket 是一种通过单个传输控制协议 (TCP) 套接字提供双向、全双工通信通道的技术。它旨在在 Web 浏览器和 Web服务器,但它可以被任何客户端或服务器应用程序使用。”
2021-03-23 01:06:45
如果您无法使用浏览器LISTEN/充当服务器,则该问题已解决您将能够以全双工方式与任何服务器通信,但您的消费者不能成为服务器。此外,如果可以的话,您将遇到一百万个防火墙问题。Emil 的解决方案效果会更好,但速度会慢一些。
2021-03-25 01:06:45
@Emil Ivanov:您说的没错,但如果只是一对一连接,它应该会更快。
2021-03-30 01:06:45

我想把你的注意力转移到一个事实,现在大多数用户都在 NAT 或防火墙之后,这意味着你不能轻松地建立到用户计算机的传入连接。因此,您的想法(如果可能)仅在某些情况下有效,并且会给您的解决方案带来额外的复杂性。因此,可能具有持久连接的客户端-服务器系统(使用 websockets 或 socket.io)是更好的选择。