티스토리 뷰

반응형

[typescript/nestjs] (개인저장용)스케쥴에 맞는 시간 동기화 로직 구현(server)

 

 getTime(): number {
 //서버 시간
    const severTime = new Date();
 //스케쥴을 시작할 시간
    const startTime = new Date(Date.parse('Tue, 07 Dec 2021 05:00:00 GMT'));

//총 33초의 스케쥴이 존재 IDLE-5 AR-10 PRE_EVENT-4 EVENT-10 POST_EVENT-4 합 33 초
const ScheduleMaxTime = 33;


    while (true) {
    //startTime에 ScheduleMaxTime을 돌려 현재 서버시간에 맞춘다.
      startTime.setSeconds(startTime.getSeconds() + (ScheduleMaxTime-1));
      if (startTime >= severTime) {
        // dt.setSeconds(-ScheduleMaxTime);
        //서버시간에 맞춘후 디테일을 위해 밀리세컨단위까지 추가해준다
        startTime.setMilliseconds(
          startTime.getMilliseconds() + severTime.getMilliseconds(),
        );
        break;
      }
    }


    const serverTime_ticks = severTime.getTime();
    const startTime_ticks = startTime.getTime();

//서버시간과 스케쥴 시간의 차이를 구한다.
    const current_play_time = startTime_ticks - serverTime_ticks;
    const returnValue =
      32 -
      parseFloat(
        new Date(current_play_time).getSeconds() +
          '.' +
          new Date(startTime).getMilliseconds(),
      );
    return returnValue;
  }

 

다음과 같이 

스케쥴 : IDLE:5초 / AR:10초 / PRE_EVENT:4초 / EVENT:10초 / POST_EVENT:4초 / 총 33 초

를 기준으로 현재 스케쥴 위치를 가져오는 알고리즘이다.

 

샘플 클라이언트의 구현도 추가하겠다.

 

#typescript #nestjs #동기화 #sync #schedule #server

반응형
댓글
반응형