为啥即使使用 HTML5 也没有通过浏览器的 UDP 连接?

Posted

技术标签:

【中文标题】为啥即使使用 HTML5 也没有通过浏览器的 UDP 连接?【英文标题】:Why no UDP connection via browser even with HTML5?为什么即使使用 HTML5 也没有通过浏览器的 UDP 连接? 【发布时间】:2013-07-15 15:48:26 【问题描述】:

为什么我们不能在浏览器和服务器之间建立 UDP 连接?为什么 TCP 连接可以(通过 WebSockets)而 UDP 不可以?

【问题讨论】:

因为 websockets 是建立在 TCP 之上的。 chrome 打包应用可以访问 UDP io 的 API。 你能解释更多,我可以用谷歌搜索吗?那个 API 是什么?你说的是 webRTC 吗? 【参考方案1】:

html5 不允许任意 TCP 连接。

相反,Web 套接字是一种基于 TCP 的特殊新协议,它允许双向通信。

同样,WebRTC 是一种基于 UDP 的特殊新协议,允许点对点通信。

允许任意套接字连接将是一个主要安全漏洞。

【讨论】:

没错,但是websocket也是TCP的,没有UDP @Cgraphics:允许 UDP Web 套接字是没有意义的。 Web 套接字依赖于 TCP 的属性,例如排序和保证交付。 注意:WebRTC 仅在 Firefox 的 UDP 之上实现。【参考方案2】:

您可以使用最新版本的 Chrome 和 Firefox 中提供的 WebRTC 访问 UDP。这使您可以直接进行浏览器 - 浏览器连接,而无需通过服务器等。

【讨论】:

很好,我们也可以在浏览器和服务器之间建立 UDP 连接吗?我猜对了? 其实RTC还是需要一个服务器来握手,从显示的文字中看不清楚... 我相信这是可能的,是的。您将需要有 WebRTC 协议的服务器端实现。我听说过这样的事情正在谈论,但我不知道任何实际的实现。 是的,webRTC 使用 ICE en.wikipedia.org/wiki/Interactive_Connectivity_Establishment 协商连接,可以在服务器端实现。使用 libjingle developers.google.com/talk/libjingle - 您应该能够创建客户端/服务器 udp 连接,尽管这可能非常具有挑战性。

以上是关于为啥即使使用 HTML5 也没有通过浏览器的 UDP 连接?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 SVG 元素没有出现? (即使在检查我的网页时)

为啥即使没有争用,我的 Oracle PreparedStatement 有时也不会返回?

为啥我的状态值即使在改变状态后也没有改变? [复制]

为啥即使禁用缓存,服务器也会忽略代码文件中的更改?

为啥没有适用于所有浏览器的通用 HTML5 视频编解码器标准?

为啥即使没有 QuartzCore 也可以使用 Core Animation? [复制]