如何建立浏览器到浏览器(点对点)的连接? [关闭]
Posted
技术标签:
【中文标题】如何建立浏览器到浏览器(点对点)的连接? [关闭]【英文标题】:How can I make a browser to browser (peer to peer) connection? [closed] 【发布时间】:2011-10-24 17:49:21 【问题描述】:如何在客户端使用 html5、CSS 和 javascript 编写一个允许 直接 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/#peerconnectionPeerConnection(基于 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" 以发送和接收通用应用程序数据(String
、ArrayBuffer
和Blob
)。 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-ios2018: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(广播式、点对点)