2014-01-15 5 views
1

저는 노드 JS에 대해 상당히 익숙합니다. 주로 서버 푸시 기술을 구현하기 위해 자바 서버 페이지를 노드로 전환했습니다.node.js를 사용하여 long 폴링을 사용하여 데이터베이스 업데이트 받기

Mysql 데이터베이스에 새로운 레코드가 삽입되면 사용자에게 데이터를 전달하는 간단한 애플리케이션을 구현하고 싶습니다.

데이터베이스 이름을 wst로 취하고 테이블 이름은 registered_people이고 테이블은 users라는 이름의 하나의 열로 구성됩니다.

레코드가 테이블에 삽입 된 경우 새 사용자가 현재 사용자에게 추가되었음을 알려야합니다.

어떻게 할 수 있습니까?

도움 주셔서 감사합니다.

답변

4

socket.io과 같은 라이브러리가 설계되었습니다. 이는 서버 푸시 작업을 사소한 것으로 만듭니다.

실제로 서버 푸시를 트리거하는 방법은 데이터를 데이터베이스로 가져 오는 방법에 따라 더 복잡 할 수 있습니다. mysql 데이터베이스에서 들어오고 나가는 모든 데이터가 동일한 노드 애플리케이션을 통과한다면 매우 간단합니다. 테이블에 삽입이있을 때 이벤트를 발생시키고 socket.io (또는 다른 푸시 코드)가 해당 이벤트를 수신하도록하십시오. 그런 다음 사용자가 추가 할 때마다 메시지가 전송됩니다.

데이터베이스가 여러 응용 프로그램에서 업데이트되는 경우 다소 까다로울 수 있습니다. 데이터베이스에서 사용자 테이블에 대한 업데이트를 폴링 한 다음 변경된 최신 사용자를 가져올 수 있습니다. 다음과 같이 할 수있는 :

setInterval(function() { 
    getUserCount(function(userCount) { 
    if(userCount > originalUserCount) { 
     // We have new users! 
     // Get the latest user and send it to the connected browsers. 
    } 
    }); 
}, 1000); 

이 매우 효율적이지를하지만, SELECT COUNT(id) FROM Users;은 데이터베이스에 많은 오버 헤드를 추가하지 말아야하고. 보다 깔끔한 솔루션은 일종의 메시징 큐를 사용하는 것입니다. 단일 데이터베이스에서 여러 시스템이 상호 작용하는 경우 메시징 시스템을 사용하면 모든 시스템에 시스템의 다른 부분에서 발생하는 일들을 구독 할 수 있습니다. 이 경우 노드 앱이 시스템의 새로운 사용자 메시지를 구독하고이를 브라우저로 보낼 수 있습니다.

2

http://socket.io/ 당신이 찾고있는 것입니다. 그는 문서에 나타낸 바와 같이

, 그 socket.io

var io = require('socket.io').listen(80); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

를 사용하여 서버에서 수신 및 사용하여 연결이 매우 간단,

var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
}); 

사용자가 업데이트를 방송으로 푸시를 달성 할 수 데이터베이스 상태가 변경 될 때마다 io.sockets.emit(object);을 사용하여 연결된 모든 클라이언트.

rooms

을 사용하여 메시지를 특정 클라이언트 집합으로 제한 할 수도 있습니다