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


83

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

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

我阅读了有关此主题的先前文章,但是没有可用的解决方案/示例。据我了解,可以使用Silverlight,Java或Flash等插件在客户端之间建立直接连接。

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


3
不带信令服务器的WebRTC对等连接:blog.printf.net/articles/2013/05/17/…–
danijar

1
另请参阅PeerJS,这是一个在该领域具有一定吸引力的项目,它具有相对不错的浏览器支持
波阿斯

1
最简单的方法是使用httprelay.io和AJAX调用。快速,少于50ms。
乔纳斯(Jonas)

Answers:


126

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

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

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

2009年2月12日W3C工作草案以来,“对等连接”部分消失了。但是这种P2P连接没有消失。在WebRTC(实时通信)规范中,它以PeerConnection的名称返回:

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

PeerConnection(基于UDP)的唯一实现存在于爱立信实验室(2011年5月)修改后的WebKit中,效果很好。WebKit现在提供了一些补丁程序(2011年10月-请参阅下面的更新!):

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

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

自2012年1月18日起,Chrome也开始支持WebRTC。通过在下启用它,可以在Dev通道(Windows,OSX,Linux)和Canary构建(Windows和OSX)中使用。它仅支持视频和音频,并且可以通过多个演示进行测试。到目前为止,不支持传输/ / ...之类的应用程序数据。chrome://flagsMediaStreamStringArrayBuffer

2012年3月16日,的WebRTC编者草案分开一个“对等网络数据API”发送和接收通用应用程序数据(StringArrayBufferBlob)。Chromium希望很快(2012年4月10日)实现Data API

在4月3日,Mozilla也发布了第一个适用于Firefox的WebRTC实例。

DataChannel计划用于Chrome版本25,带有标记,同时可以在Firefox Nightly / Aurora中进行测试(2012年12月12日):

2018年:数据通道仍处于试验阶段,但在当前版本的Chrome和Firefox中可用:


11
现在是2014年,您能否根据最新进展更新您的优秀帖子?
myroslav 2014年

1
@myroslav webrtc.org/interop是一个不错的起点。到目前为止,Firefox,Chrome和Opera都提供了全面的支持,并且可以与足够多的适配器进行互操作。
msemelman 2014年

1
我会尽快做的!
丹尼斯,

2
是在澳大利亚的2016年。我们可以获取浏览器对等的最新链接吗?
Ganesh Krishnan

1
是的,那更新如何?
obskyr

6

我不得不让您失望-目前仅JavaScript无法实现。Websocket(和Socket.IO)允许在客户端和服务器之间进行类似套接字的连接,但不允许客户端之间进行类似套接字的连接。您可以选择使用插件-Flash,Silverlight,Java或定制。

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


您确定WebSocket不允许2个浏览器之间直接进行p2p吗?从Wikipedia上的说法来看,它听起来像是:“ WebSocket是一项技术,可通过单个传输控制协议(TCP)套接字提供双向,全双工通信通道。它旨在在Web浏览器和Web中实现服务器,但任何客户端或服务器应用程序都可以使用它。”
拉兹万·弗拉维斯·熊猫

5
如果您没有浏览器LISTEN/无法充当服务器,则该问题已解决。您将能够与全双工服务器进行通信,但是您的使用者不能成为服务器。此外,如果可能的话,您将遇到一百万个防火墙问题。Emil的解决方案虽然速度较慢,但​​效果更好。
ghayes 2011年

从技术上讲,WebSocket可以在任何地方使用。但是在浏览器中,由于安全限制,这种情况不会发生。ghayes解释了这一点。另外,请注意,此解决方案可能会更快,因为通常将服务器放置在带宽容量巨大的地方,因此您的服务器可以很好地处理100个客户端,而使用真正的p2p时,您将很快使用户连接饱和。
埃米尔·伊凡诺夫

@Emil Ivanov:的意思是对的,但如果只是一对一的连接,它应该会更快。
拉兹万·弗拉维斯·熊猫

3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.