Тот же код, что и раньше, но я не знаю, почему он не работает сейчас. Пожалуйста, помогите.
Моя проблема в том, что когда я использую SSE для обмена данными в реальном времени. Объект данных, который должен быть отправлено на res.write (data:${JSON.stringify(dataObject)}\n\n
) не отправляется до тех пор, пока не будет вызвана res.end () и все данные потоков событий отправляются сразу.
response.writeHead(200, {
Connection: "keep-alive",
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
"Access-Control-Allow-Origin": '*',
'Content-Encoding':'identity' // this with and without this
});
let syncher= setInterval(() => {
if(response.finished){ // If response ended the interval is cleared
clearInterval(syncher);
return;
}else{
let dataToSend = getEventData(user,event);
if(! dataToSend ){
response.write('data:{close:true}');
clearInterval(syncher);
return;
}
response.write(`data:${JSON.stringify(dataToSend)}\n\n`);
response.flushHeaders(); // Also tried with response.flush()
if(dataToSend.close){
delEventData(user,event);
response.end();
}
}
}, 500);
Приведенный выше код находится на стороне сервера здесь также есть близкий слушатель, чтобы закрыть соединение
const ev = new EventSource(conf.apiUrl+'/getStatus/'+ (userData.id || '') );
let data = '';
ev.onmessage = eventData=>{
data = JSON.parse(eventData.data);
if(!data){
setState('progress '+data.completedSoFar)
return;
}
if(!data.close){
}else{
if(data.success){
console.log('Done Successfully')
ev.close();
}
}
Это мой код на стороне клиента
Я не знаю, почему слушатель событий не получает поток данных, пока я искал inte rnet об этой проблеме, я обнаружил, что эта проблема возникает только при использовании промежуточного программного обеспечения сжатия. Я не использую промежуточное программное обеспечение сжатия в моем приложении. Я использую nodejs v11.4.0. Я предполагаю, что когда я делаю запрос источника событий chrome, по умолчанию добавляется кодировка gzip, а узел использует это, чтобы установить заголовок кодировки ответа как gzip, я пытался удалить и заменить его, но не работал, что вызывает эту проблему?
Вот мои заголовки запроса и ответа для запроса eventSource
Извините за мою грамматику, если я сделал какие-либо ошибки.
Спасибо за помощь. Ура!