2017-02-11 9 views
0

조금만 인터넷 검색을하고, 물건을 시험해보고, 문제가없는 모든 종류의 이상한 해결책을 찾아 떠난다. 제 질문은 30 초에 한 번 실행되도록 express.js- 응용 프로그램을 어떻게 설정합니까?setInterval을 Express-app로 설정하려면 어떻게해야합니까?

이 이유는 ~ 30 초마다 변하는 변수가 있기 때문에 페이지를 다시 렌더링해야합니다. "해결책"내가 올랐다는 EADDRINUSE 오류는 이전 서버와 동일한 포트에 새 서버를 만들려고하기 때문에 오류가 발생하지 않도록 여기에서해야 할 일이 있음을 이해합니다. 뭐?

내가 시도한 것을 알고 싶다면 process.exit (및 PM2가 내 앱을 다시 시작하게 함), setInterval을 의도적으로 중단하여 PM2를 다시 시작하도록 허용하고 웹 소켓을 실행하도록 모든 것을 다시 시작하기 시작했습니다. 앞뒤로 클라이언트와 서버 사이에 있지만,이 문제가 지나치게 복잡해 졌다고 생각합니다. (아마도) 문제는 표준 setInterval로 해결할 수 있습니다.

var express = require('express'); 
var app = express(); 
var ejs = require('ejs'); 
var config = require('./config'); 
app.set('view engine', 'html'); 
app.engine('html', ejs.renderFile); 

app.get("/", function(req, res){ 
app.use(express.static(__dirname + '/views')); 

async(function(variables) { 
    res.render('index', 
    { 
    // stuff to render 
    }); 
}); 
function async(callback) { 
    // several variables... 
    callback(variables); 
} 


}); 

app.listen(config.port, "0.0.0.0"); 
+0

서버 쪽에서'setInterval'을 시도하고 있습니까? 그것은 작동하지 않습니다. 클라이언트 측에서 설정하고 눈금에 따라 데이터를 다시로드하거나 socket.io를 사용하여 서버에서 클라이언트로 데이터를 푸시하십시오. –

답변

0

당신이 google을 원하는 것들 : 혜성, 길게 당기는, 웹 소켓, event sourcing.

  1. 가 웹 서버에 글로벌 상태를 가지고, 간단한 setInterval을 그것과 setInterval을 업데이트하기 위해 지속적으로 웹 페이지에 AJAX 호출을 할 :

    기본적으로이 내가이 작업에서 어떻게 작동하는지입니다.

  2. setInterval(AJAX) 대신 web sockets을 사용하고 클라이언트에 새 상태를 푸시합니다.

두 번째 접근 방식은 빠르고 바람직하지만 당신은 오래된 브라우저를 지원해야하는 경우 대체가 필요할 수 있습니다.

+0

감사합니다! 적어도 나에게는 좋은 시작이 될 것입니다. 나는 이것을 받아 들일 수있는 답으로 세울 것이다. :) – Erik

+0

허용 된 답변에 대한 후속 질문을하는 것이 좋습니까? 아니면 새로운 질문을 만들어야합니까? – Erik

+0

다음은 나의 질문입니다. 웹 소켓으로 큰 성공을 거두었지만 메시지 이벤트를 분리하는 방법을 모르는 상황에 처하게되었습니다. 클라이언트는 어떤 이벤트가 아래의 websocket onmessage에서 messageA/B로 가야하는지 어떻게 알 수 있습니까? 서버에 설정되어 있습니까? 그렇다면 어떻게됩니까? '''클라이언트 : ws.onmessage = function (event) { messageA (event.data); messageB (event.data); }, ' '서버 : ws.send (JSON.stringify (messageA), function() (...)); ..... ws.send (JSON.stringify (messageA), function() {...}); ''' – Erik

0

당신이 올바른 방법입니다 확실 : 아래

내 특급 스크립트입니까? 내게 맞는 것 같지 않아. 나는 그것을하지 않을 것이다.

일부 JS 스크립트 (페이지 자동 새로 고침 또는 AJAX/WS를 사용하여 값 업데이트) 또는 meta tag 등을 사용하여 클라이언트에서 새로 고침 기능을 설정해야합니다.

+0

나는 이것이 올바른 접근법인지 확신 할 수는 없지만, 내가 어떻게 할 것인지 실제로 알 수는 없다. 나는 express.js 스크립트를 재실행하지 않으면 app.get-function 내부에 몇 가지 변수가 생기므로 다시 실행해야합니다. – Erik