我终于在 Shared Worker 中实现了运行 Server-Sent Event SSE。此实现允许我将服务器上运行的脚本总数限制为每个用户一个。
但是,我仍然有几个问题。
SharedWorker
根本不在 FireFox 中运行,但它在 Google Chrome 中运行。我正在使用 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);
}
}