ついに、Shared Worker で実行中の Server-Sent Event SSE を実装しました。この実装により、サーバー上で実行されるスクリプトの総数をユーザーごとに 1 つに制限することができました。
ただし、まだいくつかの問題があります。
- は
SharedWorker
FireFox ではまったく動作しませんが、Google Chrome では動作します。私はFirefox v40.0を使用しています。コンソールにエラーは表示されません。コンソールに SSL 証明書に関する警告が表示されますが、エラーは表示されません。FireFoxコンソールからの警告は次のとおりです
このサイトは SHA-1 証明書を使用しています。SHA-1 よりも強力なハッシュ関数を使用する署名アルゴリズムで証明書を使用することをお勧めします。[詳細]
ShardWorker
しばらくアイドルタイムを過ぎると動作しなくなるようです。スクリプトは共有ワーカーなしでファイルを動作させるため、これは PHP スクリプトの問題ではありません。Chrome v44.0 でこの問題が発生しています。シャードワーカーを再開するには、ページをリロードする必要があります。
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);
}
}