Post

(TIL) 2025-02-27 FINAL(18)

분산서버 작업 - 9일차


게이트서버에서 각 서버와의 latency 체크를 위해 로직을 추가 하였다. 우선 게이트 서버에서 각 서버로 전송하는 코드를 작성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 레이턴시 확인 인터벌
latencyCheck = () => {
  const packet = makeServerPacket(
    // timestamp 가 있는 packetType을 임시로 사용하였다!
    config.packetType.S_ERROR_NOTIFICATION,
    {
      errorMessage: 'latencyCheck',
      timestamp: date.now(),
    },
    -1,
  );
  this.socket.write(packet);
};
 
// 패킷을 다시 받아왔을때 핸들러
const latencyCheckHandler = ({ socket, payload, userId }) => {
  if (userId !== -1) return;
  const { errorMessage, timestamp } = payload;
  const latency = date.now() - timestamp;
  console.log(
    `###Latency### ${errorMessage} 와의 총 왕복 시간${latency} / 평균 Latency ${latency / 2}`,
  );
};

그리고 게임서버와 로비서버에서 해당 패킷을 받아 반송하는 부분을 추가한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const latencyCheckHandler = ({ socket, payload, userId }) => {
  if (userId !== -1) return;
  let { errorMessage, timestamp } = payload;
 
  if (errorMessage === 'latencyCheck') errorMessage = roomSession.name;
 
  const packet = makePacket(
    config.packetType.S_ERROR_NOTIFICATION,
    { errorMessage, timestamp },
    userId,
  );
 
  socket.write(packet);
};

레이턴시

로컬 테스트 결과 각 서버마다 레이턴시 값을 주고 받는 것을 확인할 수 있다.

내일은 중간 발표날이라 여태까지 개발한 단일서버 코드를 최근까지 작업했던 분산 서버에 다시 적용하는 작업을 진행했다. 허기 시스템, 아이템 드랍, 웨이브, 몬스터 에셋 추가 등 추가된게 많았고 적용하는데 꾀 시간을 잡아먹었다.

우선 개발한 부분까지 잘 병합처리하여 EC2에 배포까지 완료하고 테스트까지 완료했다.

This post is licensed under CC BY 4.0 by the author.