HTML5是否将允许Web应用程序建立对等HTTP连接?


100

是否可以创建一个在中央服务器帮助下可以与同一Web应用程序的其他用户建立直接连接的Web应用程序?我正在想象一个类似于UDP打孔的过程。

我已经阅读了有关HTML5中新的WebSockets API的信息,但看来您必须先启动与WS兼容服务器的连接,然后才能开始全双工连接。我还在考虑在客户端之间建立直接连接的过程,其中服务器参与初始握手。

注意:Java小程序不计算在内。我只对标准浏览器技术感兴趣。


Answers:


109

代替明智的猜测,这是一个有根据的答案:

HTML 5计划允许来自javascript的对等连接,但是这些连接将不是RAW TCP。

完整的规范可以在http://dev.w3.org/html5/websockets/中找到

r

编辑:具体参考对等连接,请检查以下链接:

重要的是要注意,功能仍在协商中。能够创建“本地聊天”网络应用程序将非常高兴:)

r


45
+1 =>“这不是明智的猜测,而是明智的答案”
Ionuț G. Stan,2009年

2
WebSocket允许连接到任何主机吗?我相信规格只说服务器。
hegemon

4
Web套接字不再是HTML5的一部分,而是一个独立的规范。
谢尔盖·伊林斯基09年

8
WebSocket不是点对点的-它们仍然是服务器的客户端,浏览器没有实现服务器的一半。
Alnitak

4
webSocket不做点对点,但是为此设计了一个更新的规范WebRTC。
埃里克·米尔

29

2012年10月17日更新: Chrome Stable v22现在具有此功能。为了在Chrome中使用此功能,必须在chrome:// flags中启用两个标志:

  • 启用MediaStream
  • 启用对等连接

然后,您可以访问AppRTC演示页面尝试演示。有关设置Chrome浏览器以使用对等功能和启用设备捕获的更多详细说明,请参见WebRTC-运行演示页面。


更新: Ericcson Labs的工程师在WebKit构建中进行了概念验证,该构建完成HTML5对等会话视频

他们在博客中演示了该技术的实际应用,以及有关该技术如何工作的图表和说明。

他们正在努力使其稳定并致力于WebKit存储库。


您估计将在WebKit中放多久?
2012年

我不知道。我建议与埃里克森核实。该链接在我的答案中。他们的论坛可能会提供有关何时发布的信息。
jmort253

要求特殊的每个浏览器配置/标志设置与正常工作的Web标准规范不同。如果不在现成的HTML5,WebSockets或WebRTC中,则没有黑客就无法进行对等。幸运的是,WebRTC似乎朝着正确的方向前进。
Beejor

11

是的,最后。

截至撰写本文(2017)时,WebRTC现在已成为大多数现代浏览器的标准部分(约占所用浏览器的70%),并允许进行多媒体流,对等和打孔。

可以在html5rocks.com上找到WebRTC的文档,示例代码和实时示例。

根据caniuse.comhtml5rocks.com,以下浏览器支持WebRTC:

全面支持: Edge 14,Firefox 22,Firefox Android 55
部分支持: Android Browser 56,Chrome 20,Chrome Android 29,Edge 12,Firefox 17,Opera 18,Opera Android 20,Opera Mobile 12,UC Browser Android 11.4
将来的支持( 2017年第三季度): Chrome for iOS 11,iOS 11的Safari 11和OS X 10.11
不支持: IE,IE Mobile,Opera Mini

WebRTC的饱和率在Apple设备上受到限制,因为Safari 11尚未发布,并且需要iOS 11或OS X 10.11。尽管根据过去的升级趋势进行了预测,但到2018年,WebRTC将在约75%的iOS设备上可用,到2020年将达到100%。


4

造成棘手的原因有很多:

  1. 防火墙(甚至只是普通的NAT)将在比HTTP低得多的协议层上使这种连接变得困难。戴上IT安全帽,这似乎是通过访问网站打开机器上任意端口的绝妙方法,因此几乎所有公司IT系统都会对其进行严格阻止。
  2. HTTP本质上是客户端-服务器协议。尽管使用长轮询(以及其他几种技术)来模拟双工通信相当容易,但是它并不是特别有效。
  3. 这将为XSS攻击打开一个大漏洞。

WebSockets旨在解决这些问题中的第二个问题,但是(我有意为之)(而不是其他两个问题)。当他们谈论HTML5规范中的对等时,他们谈论的是服务器与客户端之间的全双工通信,而不是一个客户端与另一个客户端之间的全双工通信。

但是,在websocket的顶部实现适当的网络堆栈很简单-前提是仍然必须通过服务器完成所有通信。我已经看到使用长轮询完成此操作(Uni的一个朋友使用长轮询编写了完整的TCP / IP堆栈)。


P2P不是客户端服务器。前者在同级之间移动流量,后者通过服务器将流量移动到一个或多个客户端。P2P的主要好处是,服务器可以充当媒人,而客户端之间的通信量很大(这是隐私和带宽的福音)。
Beejor

0

我的第二个athathath.jr:您很可能让服务器充当目录(公开每个已连接代理的“源”;如draft-abarth-origin一样,源为scheme + host + port ,方案为“ ws”或“ wss”)。然后,您可以启动对等WebSocket连接。感谢CORSSOP得以通过。当然,这意味着每个代理(即浏览器)都必须嵌入自己的WebSocket服务器(如Opera Unite)。

同时,以XMPP / IRC / etc。方式执行此操作:不进行对等连接,而是将WebSocket连接到中央服务器(或网络!),以将消息传递给连接的代理(最终使用某些特定的WebSocket“子协议”)

编辑:请注意,所有这些实际上都超出了HTML5的范围(所有这些内容曾经是HTML5的一部分,但已被拆分成各自的规范)


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.