2017-01-31 6 views
2

예약 시스템을 구현 중이며 허용되는 작업과 작업 시작 사이의 시간 개념을 기록한 다음 작업 기간을 기록해야합니다 . 작업의 시작 시간에 도달하면 'State A'에서 'State B'로 이동 한 다음 작업의 종료 시간에 도달하면 'State B'에서 'State C'로 이동해야합니다.NodeJS - 특정 날짜 시간에 실행하는 간단한 작업 예약

나는 Bull 또는 Bee-Queue와 같은 대기열 시스템을 사용하여 이것을 구현할 수 있다는 것을 알고 있지만, 내 작업의 '상태'만 변경하고 백그라운드 처리를 수행하지 않아도되므로 잘못된 것으로 보입니다.

어떻게하면 간단하게 "오후 3시에이 작업을 '상태 B'로 변경하고 오후 5시에이 작업을 '상태 C'(으)로 변경할 수 있습니까?

DB를 매분 폴링 할 수 있습니까? 이것이 올바른 접근인가?

답변

0

일정이 포함되지 않은 접근 방식은 요청시에 state 속성 값을 계산하는 것입니다.

정확하게 오후 3시에 state의 값을 업데이트하는 대신 누군가가 예약 자원을 요청할 때 현재 시간을 확인합니다. 그것이> 오후 3 시이고 < 오후 5시이면 state을 '주 B'로 반환하십시오. 오후 5 시가되면 state을 '주 C'로 반환하십시오.

+0

나는 그 생각을 가지고있었습니다. 다른 작업, 즉 이메일 보내기가 필요한 경우 어떻게 변경됩니까? 대기열이 필요합니까? –

+0

아마 스케줄링 시스템으로 작업을 오프로드 할 것입니다. 아마도 chronos - https://mesos.github.io/chronos/ - HTTP를 API에 연결하여 필요한 것을 수행하는 예약 된 작업을 구성 할 수 있습니다. – Robbie

+0

이메일을 보내는 방법을 알고있는 스크립트를 만들 수 있습니다. 그런 다음 고객이 시스템에서 예약을 생성하면 API는 일정 시간에 이메일 스크립트를 실행하도록 예약 시스템에 HTTP 요청을합니다. – Robbie

1

node-cron 모듈을 사용하는 것은 어떻습니까? 당신은 시간을 기준으로 작업을 예약 노드 크론를 사용할 수, 주파수 등 더 많은 예제 https://www.npmjs.com/package/node-cron

의 공식 링크를 참조 난 당신이 어떤에서 작업을 예약 setTimeout(function, timeout)을 사용할 수 있습니다

var cron = require('node-cron'); 

cron.schedule('* * * * *', function(){ 
console.log('running a task every minute'); 
}); 
+0

이것은 반복 작업에 사용되는 것으로 보입니다. 특정 시간 간격으로 작업이 필요하지만 [Crone] (https://github.com/crrobinson14/crone)이이를 해결합니다. –

+0

이것은 cron 구문을 사용하므로 특정 시간 간격으로 수행하도록 설정할 수 있습니다. – manishg

+0

한 번만? "2016 년 6 월 23 일 오후 4시 5 분 13 초에 실행하기를 원합니다"라고 말할 수 있습니까? –

1

참조를 붙여 일정 기간.

var now = new Date(); //creates date object at current time 
var date = new Date(...); //create first state-changing time 

//Execute task after (date - now) milliseconds 
setTimeout(function(){ 
    //execute tasks 
}, date - now); 

지금 당신은 당신의 작업을 완료하는 루프의 도움으로의 setTimeout() 내부에서는 setTimeout()를 할 수있다!