이것은 대역폭에 관한 질문을 제외하고 MMO 성능 과 관련이 있습니다. 이것은 CPU 부하에 관한 것입니다.
node.js와 webGL을 사용하여 간단한 FPS를 만들었습니다. MIDI Maze의 BuddyMaze 클론과 매우 유사합니다. 거의 진행되지 않고 모두가 2 차원 (높이 없음)으로 움직이며 간단한 발사체를 쏘고 벽에 부딪칩니다.
지금, 모든 플레이어가 원을 그리면서 빠르게 쏘는 서버에 여러 연결을하면 서버가 코어를 최대한 활용하고 속도가 느려지기 전에 게임에서 약 15-20 명의 플레이어를 확보 할 수 있습니다. 그리고 이것은 서버에서 30fps로 실행될 때입니다. 10fps에서 약 25-30 개의 연결을 얻습니다. 게임이 곧 더 많은 것을 할 것이기 때문에 이것은 매우 나쁘다. 그리고 이것이 가능한 노력이 되려면 더 많은 선수들을 맞출 필요가있다.
동생이 방금 동료의 TF2 서버에 대한 통계를 지적했습니다. 그의 서버는 우리보다 사양이 낮지 만, 훨씬 더 복잡한 게임 인 TF2를 실행합니다. 코어 당 36 명의 사용자로 초당 500 틱으로 엄청나게 복잡한 게임입니다. 또한 현재 대역폭보다 훨씬 더 많은 대역폭을 사용하지만 아직 그 정도를 낮추려고하지는 않았습니다.
이것이 어떻게 가능한지? 서버 성능을이 정도까지 높이기 위해 어떤 트릭이 있습니까? 내가 아는 몇 가지 사항은 다음과 같습니다.
- 서버의 프레임 속도를 낮추고 클라이언트의 위치를 보간합니다. 나는 약간의 이점을 얻었지만 분명히 TF2 서버는 이것을 귀찮게하지 않습니다.
- 클라이언트에서 충돌 감지와 같은 값 비싼 작업을 수행하고 서버에서 드물게 확인하십시오. 나는 이것을 아직 옮기지 않았으며 오늘 밤에 할 것입니다. 그럼에도 불구하고 나는 그렇게 큰 이익을 기대하지 않습니다.
- 계산을 최소화하기 위해 경기장을 영역 (쿼드 트리)으로 나눕니다. 아직 기회가 없었습니다.
- node.js가 TF2가 사용하는 것보다 느리다는 불행한 가능성을 고려했으며 이러한 종류의 고강도 작업에는 적합하지 않을 수 있습니다.
- 모든 것이 서버 구성 마법에 있습니까?
그렇다면 서버에서 요구되는 최소한의 작업 만 수행하면서도 완벽한 게임 경험을 유지하기위한 업계의 다른 비법은 무엇입니까? "CPU 시간을 절약하기 위해 클라이언트에 의존"과 "클라이언트를 신뢰하지 않음"사이에 큰 충돌이 발생하여 다양한 상황에서 라인이 어디에 그려 지는지를 아는 데 도움이됩니까?
최신 정보
프로파일 링은 필자가 찾은 유일한 진언입니다. 나는 코드 (고마워, FP!) 주위에 몇 가지 타이밍 기능을 신속하게 감 쌌고 결코 예상하지 못한 것을 발견했습니다. 데이터를 클라이언트에게 브로드 캐스트하는 행위는 거의 모든 실행 시간을 설명합니다. 구체적으로 약 90 %입니다. 추가 테스트에 따르면이 시간은 클라이언트 수와 데이터 크기에 따라 달라 지지만 더 많이 나타납니다. 20 명의 사용자로드에서 전체 데이터 대신 "{}"만 전송하여 브로드 캐스트 시간을 24ms에서 2ms 이상으로 90 % 단축했습니다. 그러나 5 명의 사용자 만 있으면 방송에 약 0.5ms가 걸립니다. 그래서 나는 여기서 약간의 최적화를해야합니다.
가장 눈에 띄는 개선 첫 번째는 시선 점검입니다. 이는 데이터에 관심이있는 사람의 수와 이해 당사자에게 전송되는 데이터의 양을 줄입니다. 이 영역에 다른 트릭이 있습니까? 방송 운영 비용을 최소화하는 데 중점을두고 있습니까?