Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的ShardWorker不是在Firefox中运行,而是在Google Chrome中运行_Javascript_Jquery_Web Worker_Shared Worker - Fatal编程技术网

Javascript 为什么我的ShardWorker不是在Firefox中运行,而是在Google Chrome中运行

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更强。

我最终实现了在共享工作进程中运行Server Sent Event SSE。这个实现允许我将服务器上运行的脚本总数限制为每个用户一个

然而,我仍然有两个问题

  • SharedWorker
    在FireFox中根本不运行,但在Google Chrome中运行。我正在使用firefox v40.0。我在控制台中没有收到任何错误。我确实在控制台中看到有关SSL证书的警告,但没有错误。以下是来自FireFox控制台的警告
  • 本网站使用SHA-1证书;建议您使用 具有使用哈希函数的签名算法的证书 比SHA-1更强。[了解更多]

  • 似乎在一段空闲时间后,
    ShardWorker
    停止了工作。这不是PHP脚本问题,因为脚本在没有共享工作程序的情况下工作。我在ChromeV44.0上遇到了这个问题。为了让shardworker重新启动,我必须重新加载页面
  • 我该怎么做才能找出导致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?请参阅,