Javascript 为什么我的ShardWorker不是在Firefox中运行,而是在Google Chrome中运行
我最终实现了在共享工作进程中运行Server Sent Event SSE。这个实现允许我将服务器上运行的脚本总数限制为每个用户一个 然而,我仍然有两个问题Javascript 为什么我的ShardWorker不是在Firefox中运行,而是在Google Chrome中运行,javascript,jquery,web-worker,shared-worker,Javascript,Jquery,Web Worker,Shared Worker,我最终实现了在共享工作进程中运行Server Sent Event SSE。这个实现允许我将服务器上运行的脚本总数限制为每个用户一个 然而,我仍然有两个问题 SharedWorker在FireFox中根本不运行,但在Google Chrome中运行。我正在使用firefox v40.0。我在控制台中没有收到任何错误。我确实在控制台中看到有关SSL证书的警告,但没有错误。以下是来自FireFox控制台的警告 本网站使用SHA-1证书;建议您使用 具有使用哈希函数的签名算法的证书 比SHA-1更强。
SharedWorker
在FireFox中根本不运行,但在Google Chrome中运行。我正在使用firefox v40.0。我在控制台中没有收到任何错误。我确实在控制台中看到有关SSL证书的警告,但没有错误。以下是来自FireFox控制台的警告ShardWorker
停止了工作。这不是PHP脚本问题,因为脚本在没有共享工作程序的情况下工作。我在ChromeV44.0上遇到了这个问题。为了让shardworker重新启动,我必须重新加载页面SharedOrder
没有在FireFox中运行
这是我的实现
这是调用SharedWorker
$(window).load(function(){
//establish connection to the shared worker
var worker = new SharedWorker("/add-ons/icws/js/worker.js");
//listen for a message send from the worker
worker.port.addEventListener("message",
function(event) {
console.log(event.data);
processServerData(event.data);
}
, false
);
//start the connection to the shared worker
worker.port.start();
});
下面是worker.js的代码
var clients = new Array();
//runs only when a new connection starts
self.onconnect = function(event) {
var port = event.ports[0];
clients.push(port);
port.start();
//implement a channel for a communication between the connecter and the SharedWorker
port.addEventListener("message",
function(event) {
replyToClientMessage(event, port);
} , false
);
}
//reply to any message sent to the SharedWorker with the same message but add the phrase "SharedWorker Said: " to it
replyToClientMessage = function (event, port) {
port.postMessage(event.data);
}
readNewMessages();
//runs every time and post the message to all the connected client
function readNewMessages(){
var serv = new EventSource('/add-ons/icws/poll.php');
serv.addEventListener("getMessagingQueue", function(event) {
var queue = JSON.parse(event.data);
notifyAllPorts(queue);
}, false);
}
//check all open clients and post a message to each
function notifyAllPorts(msg){
var len = clients.length;
var port;
for(i = 0; i < len; i++) {
port = clients[i];
port.postMessage(msg);
}
}
var clients=new Array();
//仅在新连接启动时运行
self.onconnect=功能(事件){
var port=event.port[0];
客户端。推送(端口);
port.start();
//在连接器和SharedWorker之间实现一个通信通道
port.addEventListener(“消息”,
函数(事件){
replyToClientMessage(事件、端口);
},错
);
}
//用相同的消息回复发送给SharedWorker的任何消息,但添加短语“SharedWorker Said:”
replyToClientMessage=函数(事件,端口){
port.postMessage(事件数据);
}
readNewMessages();
//每次运行并将消息发布到所有连接的客户端
函数readNewMessages(){
var serv=neweventsource('/addons/icws/poll.php');
serv.addEventListener(“getMessagingQueue”,函数(事件){
var queue=JSON.parse(event.data);
通知所有端口(队列);
},假);
}
//检查所有打开的客户端并向每个客户端发布消息
函数notifyAllPorts(msg){
var len=clients.length;
var端口;
对于(i=0;i
这是不可能的<代码>事件源
是窗口
对象的属性<代码>窗口不可用于工作人员
。看
工人无法访问:
- DOM(它不是线程安全的)
- 窗口对象
- 文档对象
- 父对象
这是不可能的<代码>事件源是
窗口
对象的属性<代码>窗口不可用于工作人员
。看
工人无法访问:
- DOM(它不是线程安全的)
- 窗口对象
- 文档对象
- 父对象
是否尝试在
self.onconnect
上删除self
?EventSource
是否在worker范围内定义?我刚刚从代码中删除了self
,没有任何更改。Chrome仍在运行,FireFox则没有。我正在做测试,看看这是否解决了超时问题。唯一一次调用EventSource
是在这一行var serv=neweventsource('/addons/icws/poll.php')代码>我不确定这是否回答了您的问题,或者没有尝试向workers添加错误处理程序?@guest271314我想您有点问题了。我将此代码添加到调用脚本worker.onerror=function(event){console.log(event);}代码>以下是我得到的错误{目标:SharedWorker,isTrusted:true,消息:“ReferenceError:EventSource未定义”,文件名:https://example.com/add-ons/icws/js/worker.js,lineno:28,colno:0,currentTarget:SharedWorker,eventPhase:2,气泡:false,cancelable:true,defaultPrevented:false}
如何/在何处定义EventSource?请参阅,在self.onconnect
尝试删除self
?EventSource
是否在worker范围内定义?我刚刚从代码中删除了self
,没有任何更改。Chrome仍在运行,FireFox则没有。我正在做测试,看看这是否解决了超时问题。唯一一次调用EventSource
是在这一行var serv=neweventsource('/addons/icws/poll.php')代码>我不确定这是否回答了您的问题,或者没有尝试向workers添加错误处理程序?@guest271314我想您有点问题了。我将此代码添加到调用脚本worker.onerror=function(event){console.log(event);}代码>以下是我得到的错误{目标:SharedWorker,isTrusted:true,消息:“ReferenceError:EventSource未定义”,文件名:https://example.com/add-ons/icws/js/worker.js,lineno:28,colno:0,currentTarget:SharedWorker,eventPhase:2,气泡:false,cancelable:true,defaultPrevented:false}
如何/在何处定义EventSource?请参阅,