HTML5 会允许网络应用程序建立点对点 HTTP 连接吗?

IT技术 javascript ajax html
2021-01-19 23:24:15

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

我已经阅读了 HTML5 中新的 WebSockets API,但在开始全双工连接之前,您似乎必须启动与 WS 兼容的服务器的连接。我更多地考虑在客户端之间建立直接连接的过程,服务器参与初始握手。

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

6个回答

这里有一个明智的答案,而不是明智的猜测:

HTML 5 计划允许来自 javascript 的点对点连接,但这些连接不会是原始 TCP。

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

jrh

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

重要的是要注意这些能力仍在谈判中。能够创建“本地聊天”网络应用程序会很好:)

jrh

webSockets 不支持点对点,但最近的规范 WebRTC 就是为此而设计的。
2021-03-28 23:24:15
WebSockets 不是点对点的——它们仍然是客户端到服务器,浏览器没有实现服务器的一半。
2021-03-29 23:24:15
Web Sockets 不再是 HTML5 的一部分,而是一个独立的规范。
2021-04-02 23:24:15
+1 => “这里不是智能猜测,而是明智的答案”
2021-04-08 23:24:15
WebSocket 是否允许连接到任何主机?我相信规范只说服务器。
2021-04-11 23:24:15

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

  • 启用媒体流
  • 启用对等连接

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


更新:爱立信实验室的工程师在 WebKit 构建中进行了概念验证,该构建可以执行HTML5 点对点对话视频

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

他们正在努力使其稳定并提交给 WebKit 存储库。

您估计在 WebKit 中使用它之前需要多长时间?
2021-03-20 23:24:15
需要特殊的每个浏览器配置/标志设置与成为工作网络标准规范的一部分不同。如果它不是开箱即用的 HTML5、WebSockets 或 WebRTC,那么没有 hack 就无法进行点对点。幸运的是,WebRTC 似乎朝着正确的方向前进。
2021-03-21 23:24:15
我不知道。我建议检查与爱立信。链接在我的回答中。他们的论坛可能会提供有关何时发布的信息。
2021-04-12 23:24:15

是的,终于。

在撰写本文时(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
未来支持( Q3 2017): Chrome for iOS 11、Safari 11 for iOS 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%。

这会很棘手有很多原因:

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

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

但是,在 websockets 之上实现适当的网络堆栈会很简单 - 条件是所有通信仍然必须通过服务器完成。我已经看到这是使用长轮询完成的(我在 Uni 的一个朋友使用长轮询编写了一个完整的 TCP/IP 堆栈)。

P2P 不是客户端-服务器;前者在对等点之间移动流量,后者通过服务器将流量移动到一个或多个客户端。P2P 的主要好处是服务器可以充当媒人,而客户端之间的流量很大(这对隐私和带宽来说是一个福音)。
2021-03-25 23:24:15

我第二个 harathath.jr:你很可能有一个服务器作为目录(暴露每个连接代理的“来源”;来源是方案+主机+端口,如Draft-abarth-origin,方案是“ws”或“wss”)。然后,您可以启动对等 WebSocket 连接;SOP正在通过感谢合作CORS当然,这意味着每个代理(即浏览器)必须嵌入自己的 WebSocket 服务器(如 Opera Unite)。

同时,使用 XMPP/IRC/etc. 方式:没有点对点连接,而是通过 WebSocket 连接到中央服务器(或网络!)以将消息传递给连接的代理(最终使用某些特定的 WebSocket”子协议")

编辑:请注意,所有这些实际上都超出了 HTML5 的范围(所有这些东西都曾经是 HTML5 的一部分,但已被拆分为它们自己的规范)