게임 랙과 패킷 손실 시뮬레이션
넷코드는 핑 1 ms인 로컬 연결에서 작성되고 호텔 와이파이를 쓰는 플레이어가 테스트합니다. 이 도구는 그 간극을 내 컴퓨터에서, 게임 프로세스에만 적용해 메웁니다. 나머지 컴퓨터는 계속 쓸 수 있습니다.
여기서 시작하세요
게임 클라이언트를 대상으로 지정하고 현실적인 나쁜 연결을 준 뒤 5분 후에 스스로 멈추게 하세요:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
이를 위한 준비된 타임라인도 있습니다. scenarios 폴더의 overloaded-game-server.json은 연결을 혼잡 상태로 몰아넣었다가 되돌리므로, 클라이언트가 변화의 양방향을 어떻게 처리하는지 볼 수 있습니다. 시간별 시나리오를 보세요.
브라우저는 괜찮은데 게임은 손실이 보이는 이유
대부분의 게임 트래픽은 UDP이고, UDP에는 손실을 숨길 곳이 없습니다. TCP 위의 웹 페이지는 조용히 재전송하며 시간이 더 걸릴 뿐이므로, 5% 손실에서도 브라우저는 괜찮게 느껴질 수 있지만 같은 5%에서 매치는 끊기고, 캐릭터가 되돌려지고, 동기화가 어긋납니다.
그래서 게임은 손실을 정직하게 테스트할 수 있는 곳입니다. 설정한 값이 곧 클라이언트가 실제로 겪는 값입니다.
무엇을 설정하고, 무엇이 드러나는가
| 설정 | 시도해 보세요 | 드러나는 것 |
|---|---|---|
| 지연 | 80에서 250 ms | 예측과 보간. 사격 뒤에 캐릭터가 뒤로 미끄러지지 않나요? |
| 지터 | 40에서 100 ms | 버퍼링. 일정한 200 ms는 계속 움직이는 핑보다 숨기기 쉽습니다. |
| 손실 | 2에서 10% | 누락된 상태 업데이트, 그리고 클라이언트가 복구하는지 어긋나는지. |
| 스파이크 | 1초, 드물게 | 기지국 핸드오버가 일으키는 정지. 보통 가장 보기 흉합니다. |
| 링크 켜기와 끄기 | 10 s 주기, 30% 끊김 | 재연결과 다시 참가하기. |
지터는 평균이 아니라 95번째 백분위수와 중앙값의 차이로 측정하세요. 지터는 평균을 거의 움직이지 않으며, 그래서 실행이 표로는 같아 보여도 플레이는 다르게 느껴질 수 있습니다.
두 빌드를 비교하려면 시드가 필요합니다
무작위 손실 때문에 두 번의 실행이 서로 다르므로 “새 빌드가 더 나쁜 것 같다”는 증거가 되지 못합니다. 같은 시드는 같은 손실과 같은 지터를 재생하여 느낌을 비교로 바꿔 줍니다:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
할 수 없는 것
이 도구는 여러분 컴퓨터의 트래픽을 가공합니다. 서버를 느리게 하지 않고, 서버의 틱 레이트를 바꾸지 않으며, 다른 플레이어를 나쁜 연결에 두지도 않으므로, 부하 상태의 서버가 아니라 나쁜 링크에 놓인 클라이언트를 테스트합니다. 서버 쪽에는 부하 테스트가 필요하고, 나쁜 연결로 가득한 로비에는 컴퓨터가 두 대 이상 필요합니다.