2017-05-12 3 views
2

데이터베이스에 새 레코드가 추가되면 데이터를 스트리밍합니다. 이제, 연결된 각 사용자에 대해 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 
} 

답변

0
  • 프런트 엔드/백엔드 링크 : 당신이 사용할 수있는 WebSockets. 이 방법으로 데이터를 TCP를 통해 옮겨진되지 않고 HTTP (빠르고 사용 덜 능숙)
  • 데이터베이스 쿼리 :

    당신이 할 수있는 경우 : 당신이 제공되지 않았기 때문에 입력 한 데이터베이스를 int로하는 방법, 여기에 두 개의 리드는 데이터를 삽입하는 코드를 수정 한 다음 WebSocket을 통해 (또는 원하는대로 HTTP를 통해, 그러나 WebSocket은 더 빠름) 백엔드로 데이터를 보내고 레코드 (또는 새로 연결된 사용자)에 대한 데이터베이스를 업데이트하도록합니다.

    여기에 링크가 있습니다 : How to listen for changes to a MongoDB collection?

희망이 도움이

+0

첫 번째 글 머리가 잘못되었습니다 : SSE와 WebSocket은 서로 빠른 (모두 TCP/IP 패킷입니다). (또한 OP는 SSE에 대한보다 빠른 대안을 요구하지 않았지만 업스트림 * 대기 시간을 줄이는 방법 /시기) –