저는 Node.js 및 Socket.io에서 newby입니다. 사용자가 UI에서 입력 한 데이터가 누적되면 서버에서 수집하고 간격을두고 데이터베이스를 누적하는 것입니다. 예를 들어, 서로 다른 사용자가 자신의 계정에서 메시지를 계속 입력하고 이러한 데이터를 서버에서 수집합니다. 1 분마다 데이터를 데이터베이스로 수집하고 데이터 풀이 끊어집니다. node.js와 socket.io로 가능합니까?Node.js 및 socket.io - 데이터베이스를 푸시하기 전에 데이터를 축적합니다.
0
A
답변
1
NodeJS에서 이러한 결과를 쉽게 얻을 수 있습니다.
메시지를 해시 맵 (사용자 당 키를 말하면 됨)에 축적하고 분당 타임 아웃을 트리거하여 해시 맵을 데이터베이스로 플러시하십시오.
var messages = {};
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
// data.id is user id, data.content the message
if (!(data.id in messages)) {
messages[data.id] = []
}
messages[data.id].push(data.content);
});
});
var flush = function() {
for (userId in messages) {
// ... write in database
// effectively flush messages
messages[userId] = [];
}
// Don't forget to set agin the next flush
setTimeout(flush, 1000);
}
setTimeout(flush, 1000);
설치 및 테스트가 매우 쉬운 순진한 솔루션입니다.
CPU 시간에 verry greedy 인 setInterval은 사용하지 마십시오.
이 예제는 단일 스레드이므로 서버를 (짧은) 시간 동안 사용할 수 없으므로 데이터베이스에 쓰게됩니다.
고 가용성 서버가 필요한 경우 메시지 저장 및 플러시를 위해 다른 프로세스를 사용하고 메시지를 주 (통신) 프로세스에 저장하는 대신 보내십시오.
답장을 보내 주셔서 감사합니다. @Feugy. 서버 성능 문제로 인해 하나씩 데이터베이스에 메시지를 작성해야한다는 의미입니까? – fgokalp
절대적으로 아니오 :) 저는 데이터베이스에 글을 쓰는 데 몇 초가 걸리는 경우 주 프로세스에서 수행하지 말고 다른 작업을이 작업에만 사용해야한다고 말합니다. – Feugy