90

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

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

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

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

4

3 回答 3

131

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

  1. HTML5 会允许 Web 应用程序进行点对点 HTTP 连接吗?
  2. 有哪些技术可以在浏览器中进行 P2P?
  3. HTML5 是否支持点对点(而不仅仅是 WebSockets)
  4. HTML5 Websockets可以直接连接2个客户端(浏览器)而不使用服务器(P2P)
  5. 是否可以在 Web 浏览器中创建对等连接?
  6. websockets 是否允许 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)将是第一个支持 WebRTC 和 PeerConnection 的主要浏览器:

自 2012 年 1 月 18 日起,Chrome 也支持 WebRTC。通过. _ _ 它只支持视频和音频之类的,并且可以通过多个Demo进行测试。到目前为止,不支持传输像/ /... 这样的应用程序数据。chrome://flagsMediaStreamStringArrayBuffer

2012 年 3 月 16 日起,WebRTC 编辑草案分离了一个“点对点数据 API”来发送和接收通用应用程序数据(StringArrayBufferBlobChromium 希望尽快实现数据 API(2012 年 4 月 10 日)。

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

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

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

于 2011-10-28T18:10:52.853 回答
6

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

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

于 2011-08-11T07:38:12.940 回答
4

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

于 2011-08-11T11:22:59.360 回答