웹 사이트 서버와 게임 서버는 어떻게 연결됩니까?
1. 게임에는 여러 가지 유형이 있습니다. 먼저 MMORPG를 살펴 보겠습니다.
RPG 서버가 아무리 간단하더라도 여러 개인 상호 작용을 처리하는 것은 불가피합니다. 같은 시나리오에서 수백 명의 사람들이 다른 사람들로부터 운영 정보를 받아야합니다.
둘째, 사용자의 운영은 매우 빈번하며 일반 서버는 긴 연결을 유지하는 경향이 있습니다. 또한 이러한 링크는 자주 상호 작용하며 명백한 지속적인 분할 전략이 없으므로 서버의 수평 스케일링을 제한합니다. 동일한 시나리오는 종종 하나의 물리적 기계에서만 실행할 수 있습니다.
다시 말하지만, PC 게임은 일반적으로 고객에게 로직 작업을하지 않습니다. 사용자는 몇 분 안에 깨고 금화를 교체하고 두 장비를 닦습니다. 따라서이 맵 서버는 맵에서 모든 플레이어의 작업을 확인하고 Monster AI 및 Drop Rate와 같은 일련의 비즈니스 논리를 계산해야합니다.
우리는 기존의 게임 서버가 웹 서버와 분명히 다르며, 긴 연결, 다중 방송, 복잡한 비즈니스 논리 및 제한된 파티션 전략과 같은 고유 한 비즈니스 요구를 갖는 것을 알 수 있습니다.
2. 게임 서버에 대한 동시성의 이점을 살펴 보겠습니다.
동시성은 실제로 프로그램 논리적 프로세스이며 멀티 코어 물리적 지원이 필요하지 않습니다. 일반적인 의미는 여러 독립 논리 스트림을 동시에 실행하는 것처럼 보이게하는 것입니다. 운영 체제 수준 동시성은 다중 프로세스 멀티 스레드 모델입니다. OS가 클럭 인터럽트, I/O 차단 및 기타 문제를 처리하도록하십시오.
서버의 경우 대부분의 작업이 I/O에 사용되는 경우 동시성 메커니즘은 I/O 액세스에 의해 전체 맵 서비스가 차단되는 것을 방지 할 수 있습니다. 작업이 차단되면 스페어 컴퓨팅 리소스를 다른 작업에 할당하십시오. 이 경우 동시성은 서버 작동 효율성 및 응답 시간에 유리합니다.
프로그래머의 경우 독립적 인 논리적 흐름은 신뢰할 수 있고 단순하며 느슨하게 결합 된 컨텍스트로 작업을 완료 할 수 있음을 의미합니다.
OS 핸들러 간의 로직 스위치는 커널에 반복적으로 갇혀 있어야하므로 일부 사람들은 이것이 너무 느리다고 생각하므로 사용자 공간에서 스레드를 수행하고 프로세스에서 여러 논리적 흐름을 제어합니다. 언어 설명 기능의 한계로 인해 C/C ++에 그러한 것들을 쓰고 사용하기에는 너무 귀찮습니다. 따라서 Erlang의 Coroutine 구문 설탕이 생성됩니다.
Node.js는 본질적으로 여러 논리 스트림 자체를 제어하지만이 논리 스트림은 I/O 상태를 기반으로 배포되며 우선 순위가 있습니다. 실제 구현에서는 비 차단 비동기 I/O를 가능한 한 많이 사용하려고합니다. 단일 작업이 I/O를 호출하면 중지하고 I/O의 신호가 전송 될 때까지 기다리면 다시 시작합니다.
이 작업을 수행 할 때마다 작업을 실행할 때마다 다른 프로그램 스트림이 완료되거나 I/O 호출이 발생할 때까지 적극적으로 전환하지 않습니다. 따라서이 작업에 너무 많은 컴퓨팅이 포함되면 전체 맵 프로세스가 여기에서 차단됩니다.
그리고 node.js는 비동기식이기 때문에 I/O에 의해 완료된 신호를 들으려면 콜백을 지속적으로 작성해야합니다. 단일 작업의 논리적 흐름은 여러 번 중단됩니다. 작업이 상당히 복잡해지면 소위 Callbak Hell은 디버깅 및 개발에 큰 문제를 일으킬 것입니다.
3. 위의 이유로 인해 비 프로토 타입 MMORPG 서버 개발에서 node.js를 사용하지 않는 것이 좋습니다.
4. 최근에 등장한 모바일 게임 서버는 모바일 게임이 네트워크 문제로 제한되고 서버가 키 데이터 만 확인할 수 있기 때문에 Node.js에 매우 적합하며 여러 사람이 상호 작용하는 상황을 처리 할 수 없습니다. 서버 측은 너무 단순화되어 웹 서버와 다르지 않습니다. 비즈니스 로직은 간단하고 데이터를 처리 한 다음 지속됩니다.