【问题标题】:HTML5 Messaging API and the order of messages when using web workersHTML5 Messaging API 和使用 Web Worker 时的消息顺序
【发布时间】:2012-12-25 13:05:14
【问题描述】:

在一个简单的 HTML5 web worker 项目中,我定义了一个使用 HTML5 消息传递 API 交换消息的 web worker。由于我们已经定义了两个 .onmessage 处理程序(回调函数),一个在主脚本中,另一个在 worker.js 中,因此我在这里感到困惑: index.html:

<!DOCTYPE html>
<html>
<body>
<script>
var worker = new Worker("worker.js");
worker.onmessage = function(event) {
    alert("Reply from index.html:"+event.data);
}
worker.postMessage("message 3,");
</script>
</body>
</html>

worker.js:

this.onmessage = function(event) {
    postMessage("message 0,"+event.data);
} 
postMessage("message 1,");

我不明白的一件事是显示消息的顺序! 它首先显示: 然后显示这个

但是为什么呢?我很困惑如何以及何时调用这些处理程序?首先是worker.postMessage("message 3,");触发 worker.postMessage("message 3,");在 worker.js 和 postMessage("message 0,"+event.data); in return 触发主脚本中的 worker.onmessage = function(event) !然后在最后 postMessage("message 1,");从worker.js 触发主脚本(index.html)的onmessage。我们可以说我们对一个worker的任何postMessage调用都会触发其他webworker的onmessage函数吗?

【问题讨论】:

    标签: html web-worker


    【解决方案1】:

    您可能会将 Web Worker 实现与您可能将对象作为函数传递的 js 方法混淆。 HTML5 中的 WEB Worker 正在将线程引入 JAVASCRIPT。

    原因似乎在 '.onmessage' 的附加事件中,而您的 worker.js 以发布的表达式 'postMessage("message 0,"+event.data);' 开头.由于这个原因,message 0 排在第一位。

    像下面这样的一个很好的介绍性教程应该可以解决您的问题 - THE BASICS OF WEB WORKERS

    【讨论】:

    • 好的,但是为什么消息的顺序不像 1,0,3。 index.html的onmassage事件什么时候触发,worker.js的onmessage事件什么时候触发?
    • 因为,您追加事件 .onmessage 并且您的工作人员以发布的表达式 postMessage("message 0,"+event.data); 开头。由于这个原因,“消息 0”首先出现。
    • 谢谢,我还编辑了我的问题,只是为了更清楚地说明我的担忧是什么。如果您能评论我的最后一行问题,我将不胜感激。事实上我不知道为什么我们在多个地方都定义了 onmessage 处理函数!以及什么时候会触发哪个
    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多