언제나처럼, 몇 가지 선택이 당신이 원하는대로 받아 들일 수 있습니다.
P2P 연결을 사용하는 것은 까다 롭지 만 특히 VOIP 및 멀티 플레이어 온라인 게임과 같은 대기 시간이 짧은 분야에서는 강력 할 수 있습니다.
정보와 연결된 플레이어와 관련된 상태를 처리 할 서버를 노출해야한다고 생각합니다. 이 부분에는 C++
, 네트워킹에는 boost::asio
을 사용하는 것이 좋습니다.이 두 가지를 사용하여 잘 설명 된 예제를 많이 찾을 수 있으며 매우 우수하고 강력하고 확장 가능하다는 것을 알 수 있습니다. 그러나 이것은 결국 당신에게 달려 있습니다.
이 구성 요소는 게임에 참여하거나 만들려는 게이머로부터 들어오는 연결을 수락하는 역할을합니다. 현재 연결되어있는 게임 및 사용자 목록을 보유하고 새로운 수신 플레이어가 사용할 수 있도록합니다.
아주 간단하지 않습니까? 이제 게임 아키텍처에 대한 선택이 필요합니다. 여기서는 플레이어간에 P2P
연결을 사용하거나 서버를 각 플레이어 간의 프록시로 사용합니다.
각 게임 플레이어에 관한 정보를 가진 서버는 플레이어간에 연결을 전달하는데 사용될 수있는 프록시
으로 서버. 이것은 서버이기 때문에 단일 실패 지점을 작성하기 때문에 확장 성 및 성능 측면에서 다소 비효율적이지만이 도메인에 대한 요구 사항이 적기 때문에 선택 사항 일 수 있습니다.
이 경우 서버는 게임에 참여하고 다른 모든 플레이어에게 메시지를 브로드 캐스트 할 때 새로운 소켓 (예 : 다른 소켓)을 받아 들일 수 있으므로 다른 플레이어 조인, 움직임, 촬영 ...
조금 복잡합니다 peer-to-peer 연결
. 서버는 현재 어떤 플레이어와 게임이 현재 존재 하는지를 알기위한 목적으로 사용되지만, 사용자 간의 연결을 관리 할 책임이있는 대신 단순히 게임에 참가하려는 플레이어에게 "이봐, 너는 새로운 게임에 참여하고 싶다면 10.20.30.40
"으로 연락하십시오. 공개 게임을 "주관하는"사람의 IP 주소입니다.
그러면 큰 어려움을 겪을 것입니다. 라우터 뒤에있는 경우 어떻게이 호스트와 통신 할 예정입니까? 들어오는 플레이어가 라우터간에 게임을 호스팅하는 컴퓨터에 도달 할 수있게하려면 클라이언트 측에 NAT- 통과 기능을 구현해야합니다.
UPnP's IGD (Internet Gateway Device)
을 사용하여 일부 포트를 열어 원하는 컴퓨터로 리디렉션하도록 요청할 때 Skype를 사용하여이 문제를 해결하기위한 몇 가지 기술이 VOIP 응용 프로그램에서 사용됩니다. 이것은 시간이 걸리고 모든 라우터에서 구현되지 않기 때문에 까다로운 작업입니다. 따라서 잠재적으로 완전한 실패로 이어질 수 있습니다. 이 예제를 위해이 문제를 쉽게 극복하고 다음 문제를 해결할 수 있다고 가정 해 봅시다.
계산 된 게임을 호스팅하면 게임에 연결된 다른 플레이어와 현재 연결되어있는 다른 플레이어를 알릴 수 있습니다. 여기에있는 아이디어는 각 플레이어를 동기화 상태로 유지하기 위해 (즉, 움직임, 샷, 비공개 메시지 등) 업데이트에 대해 각 플레이어가 서로 이야기하는 것입니다.). 광고와 메시지가 다른 플레이어에게 방송되는 방법을 정의 할 수있는 주문 패킷 알고리즘 (UDP 또는 ENet을 사용하는 것이 좋음)을 구현할 수도 있습니다.
예를 들어 4 명이 연결된 경기를 예로 들어 봅니다. 호스트 밥, 앨리스 이웃, 톰 뉴욕과 마이크 우리는이 예제의 목적을 위해 필요한 다른 사람에 살고있는 사람이있다.
앨리스는 먼저 밥의 게임에 연결하고, 밥과 앨리스가 경기의 현재 상태에 대한 정보를 교환 할 때마다 자신이 참가한 밥에게 경고합니다. 이제 톰이 들어 와서 밥에게 새로운 플레이어라고 알려주고, 밥에게 톰에게 다른 플레이어가 연결되어 있고 IP 주소 (앨리스)를 알려줍니다. 이제 Bob은 누군가가 연결되어 있고 자신의 IP 주소를 제공한다고 Alice에게 알립니다. Bob이 죽었다고 상상해보십시오. Bob이 Alice에게 말했습니다. 왜냐하면 Tom이 들어 오기 전에 먼저 그녀와 이야기하기 위해 사용 되었기 때문입니다. 그리고 Bob이 방금 죽었다는 것을 Tom에게 알릴 필요가있는 것은 이제 Alice입니다.
모든 플레이어가 모든 플레이어에게 모든 광 고를 브로드 캐스트하도록 허용 할 수는 있지만 엄청나게 많은 양의 데이터를 처리 할 수 있으며 일치하는 플레이어의 수만큼 확장 할 수 없습니다. 그래프을 P2P 환경에서 통신하는 데 훨씬 효율적일 수 있지만 설명하는 데 훨씬 더 많은 시간을 할애 할 수 있습니다.
나는 이러한 기술에 대해 내게 지적했다. 단순한 상태로 유지하려는 경우 고전적인 클라이언트 - 서버 아키텍처를 사용하고 처리해야하는로드를 제공하면 수용 할 수있는 것 이상이다.
Enjoy;)
이 게임은 LAN에서만 또는 인터넷에서만 사용하기위한 게임입니까? –
절대 최소값은 LAN이지만 인터넷을 통해 작동하는 것이 좋습니다. 사용자가 포트를 수동으로 열어야하는지 상관하지 않으며, 가능하면 좋겠다. –
좋습니다. 따라서 네, 최소 중앙 집중화 된 서버가 필요합니다. 멀티 캐스팅/방송은 LAN 전용 게임의 경우 옵션이었습니다. –