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

时间:2011-08-11 07:35:09

标签: javascript html5 tcp p2p tcp-ip

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

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

我读过有关此主题的先前帖子,但我找不到可用的解决方案/示例。从我读到的内容可以使用Silverlight,Java或Flash等插件进行客户端之间的直接连接。

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

3 个答案:

答案 0 :(得分:116)

Stackoverflow上有几个关于浏览器中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?
  9. 正如大多数主题中所提到的,2008年的HTML5工作草案都有一个“点对点连接”部分:

    由于W3C Working Draft 12 February 2009“点对点连接”部分消失了。但这种P2P连接并没有消失。它在WebRTC(实时通信)规范中以PeerConnection的名称重新出现:

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

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

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

    可能Chrome(使用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计划用于Chrome版本25,标志后面,同时可以在Firefox Nightly / Aurora(2012年12月12日)进行测试:

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

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