node.js/expressアプリケーションでイベントエミッタを設定しました。このイベントは、フロントエンドのリスナーによって捕捉されます。事は、私が一度呼ばれたことを見ることができますが、エミッターは最大4回まで同じイベントを出します。さらに、一般に、イベントはリスナーによって受信され、処理されるが、時には何も起こらない。誰かが私が間違っていることについての考えを持っていますか?SSEエミッタが複数回起動し、何度かブラウザがイベントを受け取らない
バックエンド:
app.get('/getStatus', isLoggedIn, function(req, res){
res.writeHead(200, {'Content-Type': 'text/event-stream'});
progressEmitter.on('status',function(newState, job_id, fTime, jobLink){
console.log('Updated state to : ' + newState + ' for job ' + job_id);
res.write("event: state\n");
res.write(`data:${newState},${job_id},${fTime},${jobLink}\n\n`);
console.log(`Emitted state change data! :${newState},${job_id},${fTime},${jobLink}\n\n`);
});
})。
フロントエンド:
$(document).ready(function() {
var state = [];
var source = new EventSource('getStatus');
source.addEventListener('state', function(e) {
state = e.data.split(',');
for (var ajob in jobsReceived){
if (jobsReceived[ajob].id == state[1]) {
jobsReceived[ajob].status = state[0];
jobsReceived[ajob].finished_time = state[2];
console.log(state[0]);
if (state[0] === 'saved') jobsReceived[ajob].link = state[3];
break;
}
}
$('#table').bootstrapTable('updateByUniqueId', {
id: state[1],
row: {
status: format_status(state[0]),
finished_time: state[2],
link: state[0] === 'saved'? state[3]:''
}
});
});