MessageChannel 和 WebSockets 的区别?

Posted

技术标签:

【中文标题】MessageChannel 和 WebSockets 的区别?【英文标题】:Difference between MessageChannel and WebSockets? 【发布时间】:2015-04-14 06:29:56 【问题描述】:

我不知道 MessageChannel 和 WebSockets 有什么区别?

我需要以下要求:

尽量减少延迟 全双工 最小标头数据长度

两者都满足这个要求吗?哪个更好?

【问题讨论】:

【参考方案1】:

html5 Web Messaging API 可用于在浏览器中加载的独立代码段之间进行通信(规范称它们为“浏览上下文”)。例如,如果您的页面包含<iframe>,并且您希望在它与外部代码之间进行安全通信,则可以使用 Web 消息传递。考虑来自 Opera 开发门户的this explanation:

频道消息对于跨平台的交流特别有用 多个来源。考虑以下场景。我们有一个文件 在http://socialsite.example 包含来自的内容 http://games.example 嵌入在一个 iframe 中,内容来自 http://addressbook.example 在另一个。

现在假设我们想要 从我们的地址簿网站向我们的游戏网站发送消息。我们可以 使用社交网站作为代理。然而,这意味着地址簿 获得与社交网站相同级别的信任。我们的社交网站 要么必须信任每个请求,要么为我们过滤它们。

有频道 但是,http://addressbook.example 和 http://games.example可以直接交流。

Web Sockets API 可用于在浏览器和服务器中加载的代码之间进行通信。所以它有一个完全不同的目的。由于您提到低延迟和“全双工”的要求,我假设您的意思是客户端-服务器通信,因此您正在寻找网络套接字。

【讨论】:

好消息是,Firefox 不久前就支持频道消息(MessageChannel)了。 但是消息 API 不是上下文之间的低延迟和全双工(2 路通信)吗?一本 MS 的书说:“WebSockets 的一个常见用途是用于浏览器内的即时消息客户端”,但 Messaging API 是否更合适? Messaging API 是关于在浏览器中运行的各种代码之间交换消息的。例如,网络工作者可能想与主线程中运行的代码交谈。或者加载在 iframe 中的网站可能会与加载它的页面对话。但是消息 API 不是 一种通过网络进行通信的方式 - 就像 WebSockets 一样。所以你不能用它来实现一个 IM 客户端。 也许这会说清楚:WebSockets 用于通过网络发送数据,通常在浏览器和服务器之间。消息 API 用于在单个浏览器中的线程/进程之间发送数据。

以上是关于MessageChannel 和 WebSockets 的区别?的主要内容,如果未能解决你的问题,请参考以下文章

MessageChannel是什么,怎么使用?

Spring Integration 窃听直接 MessageChannel 进行测试

websocke

websocke前世今生

websocke 在线测试地址

websocke 在线测试地址