데이터베이스에 새 레코드가 추가되면 데이터를 스트리밍합니다. 이제, 연결된 각 사용자에 대해 10 초마다 새로운 레코드를 db에 쿼리하고 있습니다. 거기에 더 좋은 방법이 있습니까? 새 레코드를 삽입하고 관련 사용자의 요청에 액세스하고 사용자에게 스트림을 보낸 후 EN 이벤트를 발생시켜야하는 것처럼 느껴집니다.서버에서 보낸 이벤트로 데이터를 푸시 할 때
(. 나는 점 명확 그래서을 사용하려면 코드를 단순화은 아마 완전히 작동하지 않습니다.)
router.get("/event", (req, res, next) => {
let userId = getUserIdFromRequest(req);
getData(userId, (err, data) => {
let stream = res.push("/notification/new");
stream.end(JSON.stringify(data));
res.write("data:/notification/new\n\n");
res.flush();
});
});
getData(userId, callback) {
model.find({where: { and: [{ "userId": userId }, { "notified": false }] }}, (err, data =>) {
callback(null , data);
setTimeout(function() { getData(callback); }, 10000);
if (data) {
setDataAsNotified(data); // makes notified: true
}
})
}
프런트 엔드 :
let source = new EventSource("/route/notification/event")
source.onmessage = (event) => {
// display notification
}
첫 번째 글 머리가 잘못되었습니다 : SSE와 WebSocket은 서로 빠른 (모두 TCP/IP 패킷입니다). (또한 OP는 SSE에 대한보다 빠른 대안을 요구하지 않았지만 업스트림 * 대기 시간을 줄이는 방법 /시기) –