我终于在共享工作器中实现了运行Server-Sent Event SSE。此实现允许我将服务器上运行的总脚本限制为每个用户一个。
但是,我仍有几个问题。
SharedWorker
在FireFox中根本不运行,但它在谷歌浏览器中运行。我使用的是firefox v40.0。我在控制台中没有出现任何错误。我确实在控制台中看到有关SSL证书的警告,但没有错误。以下是来自FireFox控制台的警告本网站使用SHA-1证书;它建议你使用 具有使用散列函数的签名算法的证书 比SHA-1更强。[了解更多]
ShardWorker
在闲置一段时间后停止工作。这不是PHP脚本问题,因为脚本在没有共享工作程序的情况下工作。我在使用Chrome v44.0时遇到了这个问题。为了让shardworker重新开始,我必须重新加载页面。我该怎么做才能找出导致ShardWorker停止的原因?
为什么没有SharedWorder
在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);
}
}
答案 0 :(得分:0)
这是不可能的。 EventSource
是window
对象的属性。 window
无法使用Worker
。见Features Available to Workers
工人无权访问:
- DOM(它不是线程安全的)
- 窗口对象
- 文档对象
- 父对象