是否可以创建一个网络应用程序,在中央服务器的帮助下,可以与同一网络应用程序的其他用户建立直接连接?我正在想象一个类似于 UDP 打孔的过程。
我已经阅读了 HTML5 中新的 WebSockets API,但在开始全双工连接之前,您似乎必须启动与 WS 兼容的服务器的连接。我更多地考虑在客户端之间建立直接连接的过程,服务器仅参与初始握手。
注意:Java 小程序不算在内。我只对标准浏览器技术感兴趣。
是否可以创建一个网络应用程序,在中央服务器的帮助下,可以与同一网络应用程序的其他用户建立直接连接?我正在想象一个类似于 UDP 打孔的过程。
我已经阅读了 HTML5 中新的 WebSockets API,但在开始全双工连接之前,您似乎必须启动与 WS 兼容的服务器的连接。我更多地考虑在客户端之间建立直接连接的过程,服务器仅参与初始握手。
注意:Java 小程序不算在内。我只对标准浏览器技术感兴趣。
这里有一个明智的答案,而不是明智的猜测:
HTML 5 计划允许来自 javascript 的点对点连接,但这些连接不会是原始 TCP。
完整的规范可以在http://dev.w3.org/html5/websockets/找到
jrh
编辑:具体参考点对点连接,请查看以下链接:
重要的是要注意这些能力仍在谈判中。能够创建“本地聊天”网络应用程序会很好:)
jrh
2012 年 10 月 17 日更新:此功能现在存在于 Chrome Stable v22 中。为了在 Chrome 中使用此功能,必须在 chrome://flags 中启用两个标志:
然后您可以访问AppRTC 演示页面来试用演示。有关设置 Chrome 以使用对等功能和启用设备捕获的更多详细说明,请参阅WebRTC - 运行演示页面。
更新:爱立信实验室的工程师在 WebKit 构建中进行了概念验证,该构建可以执行HTML5 点对点对话视频。
他们在博客中展示了该技术的实际应用,以及有关该技术如何工作的图表和解释。
他们正在努力使其稳定并提交给 WebKit 存储库。
在撰写本文时(2017 年),WebRTC 现在是大多数现代浏览器(大约 70% 的浏览器)的标准部分,并允许多媒体流、点对点和打孔。
可以在html5rocks.com上找到 WebRTC 的文档、示例代码和现场示例。
根据caniuse.com和html5rocks.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%。
这会很棘手有很多原因:
WebSockets 旨在解决这些问题中的第二个问题,但(我认为是故意的)不是其他两个问题。当他们在 HTML5 规范中谈论点对点时,他们谈论的是服务器和客户端之间的全双工通信,而不是一个客户端和另一个客户端之间的全双工通信。
但是,在 websockets 之上实现适当的网络堆栈会很简单 - 条件是所有通信仍然必须通过服务器完成。我已经看到这是使用长轮询完成的(我在 Uni 的一个朋友使用长轮询编写了一个完整的 TCP/IP 堆栈)。
我第二个 harathath.jr:你很可能有一个服务器作为目录(暴露每个连接代理的“来源”;来源是方案+主机+端口,如Draft-abarth-origin,方案是“ws”或“wss”)。然后,您可以启动对等 WebSocket 连接;该SOP正在通过感谢合作CORS。当然,这意味着每个代理(即浏览器)必须嵌入自己的 WebSocket 服务器(如 Opera Unite)。
同时,使用 XMPP/IRC/etc. 方式:没有点对点连接,而是通过 WebSocket 连接到中央服务器(或网络!)以将消息传递给连接的代理(最终使用某些特定的 WebSocket”子协议")
编辑:请注意,所有这些实际上都超出了 HTML5 的范围(所有这些东西都曾经是 HTML5 的一部分,但已被拆分为它们自己的规范)