2011-08-11 154 views
59

我怎么能写在客户端使用HTML5CSS的JavaScript一个网站,将允许客户端浏览器之间直接TCP/IP连接,一旦页面加载如何将浏览器设置为浏览器(对等)连接?

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

我读过此主题的以前的帖子,但没有可以找到的工作解决方案/示例。从我读到的客户端之间的直接连接可以使用插件,如Silverlight,Java或Flash。

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

+2

的WebRTC对等连接,而信令服务器:http://blog.printf.net/articles/2013/05/17/webrtc-without-a-signaling-server/ – danijar

+0

另见[PeerJS](http:// peerjs。这是一个在这个领域有一定牵引力的项目,它有相对不错的[浏览器支持](http://peerjs.com/status/)。 – Boaz

+0

最简单的方法是使用http://httprelay.io和AJAX调用。速度很快,小于50ms。 – Jonas

回答

101

这里#2是关于P2P连接几个主题在浏览器:

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

在大多数的topicts的所提到的,既2008 HTML5工作草案中具有节 “对等网络连接”:

由于th e W3C Working Draft 12 February 2009“对等连接”部分消失。但是这个P2P连接并没有消失。这回的WebRTC(实时通信)规范中的名称PeerConnection这下:

自2011年10月31日,W3C的编者草案是一个正式的工作草案:

由爱立信实验室(2011年5月)修改的WebKit中存在PeerConnection(基于UDP)的唯一实现,该工具运行良好。有些补丁是在WebKit的,现在(2011年十月 - 见下面的更新!):

此外,主动的WebRTC是由谷歌,Mozilla和Opera的项目。因此,他们继续在PeerConnection等规格:

大概浏览器(使用WebKit的)将配套的WebRTC与PeerConnection这第一大浏览器:

自2012年1月18日起,Chrome is supporting WebRTC as well。它可以用于Dev channel (Windows, OSX, Linux) and the Canary build (Windows and OSX)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计划在铬25版本,标志的后面,同时它可以在Firefox每晚/极光测试(2012 12月12日):

+10

这是2014年,你可以更新你的优秀帖子与最近的进展? – myroslav

+1

@myroslav http://www.webrtc.org/interop是一个很好的开始。到目前为止,Firefox,Chrome和Opera提供了全面支持,并且可以与适当的适配器进行互操作。 – msemelman

+0

你可以请更新你的优秀帖子与最近的进展! – Abderrahim

6

我必须让你失望 - 目前只有JavaScript无法实现。 Websockets(和Socket.IO)允许客户端和服务器之间的类似于套接字的连接,但不允许客户端之间的连接。你的选择是一个插件 - 无论是Flash,Silverlight,Java或定制。

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

+0

你确定WebSocket不允许在两个浏览器之间直接使用p2p吗?根据维基百科上的说法,它听起来像是这样:“WebSocket是一种通过单一传输控制协议(TCP)套接字提供双向,全双工通信信道的技术,它被设计用于在网络浏览器和网络服务器,但它可以被任何客户端或服务器应用程序使用。“ –

+5

如果您无法使用浏览器'LISTEN' /充当服务器,则解决该问题。您将能够以全双工方式与任何服务器通信,但您的客户无法成为服务器。此外,如果可以的话,您将遇到数百万个与防火墙相关的问题。 Emil的解决方案会更好,尽管速度更慢。 – ghayes

+0

从技术上讲,websockets可以在任何地方使用。但在浏览器中,由于安全限制,这不会发生。盖伊斯解释说。另外,请注意,这个解决方案可能**会更快**,因为通常服务器放置在具有巨大带宽容量的地方,所以您的服务器可以很好地处理100个客户端,而使用真正的p2p时,您将非常快速地饱和用户连接。 –

2

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

相关问题