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

Posted

技术标签:

【中文标题】如何建立浏览器到浏览器(点对点)的连接? [关闭]【英文标题】:How can I make a browser to browser (peer to peer) connection? [closed] 【发布时间】:2011-10-24 17:49:21 【问题描述】:

如何在客户端使用 html5CSSjavascript 编写一个允许 直接 tcp/ip 连接的网站页面加载后在客户端浏览器之间进行

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

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

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

【问题讨论】:

没有信令服务器的WebRTC对等连接:blog.printf.net/articles/2013/05/17/… 另见PeerJS,一个在该领域有一定吸引力的项目,browser support比较不错。 最简单的方法是使用httprelay.io 和AJAX 调用。速度很快,不到 50 毫秒。 【参考方案1】:

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

    Will HTML5 allow web apps to make peer-to-peer HTTP connections? What techniques are available to do P2P in the browser? Does HTML5 Support Peer-to-Peer (and not just WebSockets) Can HTML5 Websockets connect 2 clients (browsers) directly without using a server (P2P) Is it possible to create peer-to-peer connections in a web browser? Do websockets allow for p2p (browser to browser) communication? HTML 5 Peer to Peer Video Possibilities? Is WebRTC implemented in any browsers yet?

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

http://www.w3.org/TR/2008/WD-html5-20080122/#peer-to-peer http://www.w3.org/TR/2008/WD-html5-20080610/comms.html#peer-to-peer

自从W3C Working Draft 12 February 2009 之后,“点对点连接”部分消失了。但是这个 P2P 连接并没有消失。它在 WebRTC(实时通信)规范中重新命名为 PeerConnection:

http://dev.w3.org/2011/webrtc/editor/webrtc.html#peerconnection(W3C 编辑草案) http://www.whatwg.org/specs/web-apps/current-work/webrtc.html#peerconnection (Since 5th December 2011 forwarded to W3C Editor's Draft)

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

http://www.w3.org/TR/2011/WD-webrtc-20111027/#peerconnection

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

https://labs.ericsson.com/apis/web-real-time-communication/ https://labs.ericsson.com/developer-community/blog/update-webkit-contributions

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

http://www.webrtc.org/

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

http://www.webrtc.org/blog/firststeptowardchromeintegration http://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/95bf1e2e1de852fc https://lists.webkit.org/pipermail/webkit-dev/2011-November/018445.html

自 2012 年 1 月 18 日起,Chrome is supporting WebRTC as well。它可以在Dev channel (Windows, OSX, Linux) and the Canary build (Windows and OSX) by enabling it under chrome://flags 中使用。它只支持MediaStream之类的视频和音频,可以用几个Demos进行测试。目前还不支持传输String/ArrayBuffer/... 等应用程序数据。

由于16th March 2012, the WebRTC Editor's Draft 分隔"Peer-to-peer Data API" 以发送和接收通用应用程序数据(StringArrayBufferBlob)。 Chromium wants to implement the Data API soon(2012 年 4 月 10 日)。

4 月 3 日,Mozilla 也在 WebRTC for Firefox 上发布了第一个工作示例。

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

http://updates.html5rocks.com/2012/12/WebRTC-hits-Firefox-android-and-ios

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

https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel

【讨论】:

这里是 2014 年,你能用最近的进展更新你的优秀帖子吗? @myroslav webrtc.org/interop 是一个很好的起点。到目前为止,Firefox、Chrome 和 Opera 已提供全面支持,并且可以与其他适配器进行互操作。 我会尽快做的! 2016 年在澳大利亚。我们可以提供浏览器点对点的最新链接吗? 是的,那次更新怎么样?【参考方案2】:

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

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

【讨论】:

您确定 WebSocket 不允许 2 个浏览器之间的直接 p2p 吗?从 wikipedia 上的说法听起来它可以:“WebSocket 是一种通过单个传输控制协议 (TCP) 套接字提供双向、全双工通信通道的技术。它旨在在 Web 浏览器和 Web 中实现服务器,但它可以被任何客户端或服务器应用程序使用。” 如果您不能将浏览器 LISTEN / 用作服务器,则该问题已解决。您将能够以全双工方式与任何服务器通信,但您的消费者不能成为服务器。此外,如果可以的话,你会遇到一百万个防火墙问题。 Emil 的解决方案效果会更好,虽然会更慢。 从技术上讲,websockets 可以在任何地方使用。但在浏览器中,由于安全限制,这不会发生。 ghayes解释了它。另外,请注意,此解决方案可能会更快,因为通常服务器放置在具有巨大带宽容量的地方,因此您的服务器可以很好地处理 100 个客户端,而使用真正的 p2p 时,您将非常饱和用户连接很快。 @Emil Ivanov:你说的是真的,但如果它只是一个 1to1 连接,它应该更快。【参考方案3】:

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

【讨论】:

以上是关于如何建立浏览器到浏览器(点对点)的连接? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot---Web Socket(广播式、点对点)

WebRTC介绍

移动应用程序和电脑浏览器之间的点对点通信

点对点协议(Point-to-Point Protocol)

WebRTC 是如何工作的?

请教各位,是否安卓不支持wifi点对点连接?