2013-08-25 3 views
1

내가 뭔가하고 싶은 여러 후속 뷰 렌더링 : 기본적으로Node.js를 익스프레스

//client -> notifies server that client is connected. 

//server -> begins fetching information from DB (series of both async and synchronous requests). 

//as sets of data become available on server -> server pushes updates to client via res.render() 

내가 클라이언트의 메뉴 항목이, 그리고 서버가 도착 가져 오는 데이터와 해당 메뉴를 업데이트 할을 준비된. 이 일을 할 수있는 방법이 있습니까? 나는에 한 번 응답이 전송됩니다,라고 렌더링 때문에

res.render('something'); 
// again 
res.render('somethingElse'); 

을 수행하고 다시 호출

". : 그들이 보낸 후 헤더를 설정할 수 없습니다 오류"할 수없는 렌더링 할 수 없습니다 통지

제안 사항?

+0

서버에서 클라이언트로 데이터를 푸시합니다. 폴링 솔루션의 대안? –

답변

2

HTTP 요청/응답을 통해 작동합니다. 일반적으로 응답이 보내지면 연결이 종료됩니다.

서버에서 클라이언트로 데이터를 스트리밍하려면 websockets을 사용할 수 있습니다. socket.io이라는 매우 유명한 node.js 모듈이 있는데, 이는 웹 소켓 사용을 단순화합니다.

socket.io를 사용하여 클라이언트 코드는 다음과 같습니다

var socket = io.connect('http://yourserver.com'); 
socket.on('data', function (data) { 
    updateMenu(data); 
}); 

그리고 서버 코드 : 당신이 간단한 해결책을 원하는 경우

var io = require('socket.io').listen(80); 
io.sockets.on('connection', function (socket) { 
    socket.emit('data', data); 
    getMoreDataFromDb(function(data){ 
     socket.emit('data', data); 
    }); 
    // etc.. 
}); 

또는, 당신은 단지 여러 수를 모든 데이터를 가져올 때까지 작은 아약스 요청을 서버에 전송합니다.

(function getData(dataId){ 

    $.ajax({ 
     url:"yourserver.com/getdata", 
     data: dataId || {}, 
     success:function(data){ 
      updateMenu(data); 
      if(data) getData({ lastDataReceived: data.lastId }); // server is still returning data, request more 
     } 
    }); 

})();