멀티 플레이어 게임서버 기본설계

in #kr6 years ago

기본적으로이 기능은 다음과 같이 작동합니다.
첫째, 서버에서 호스팅되는 곳마다 선택한 포트에 소켓을 엽니 다.
이 작업은 전용 스레드에서만 수행해야하며 이 작업 만 처리하면됩니다. 항상 열려 있어야하며 연결을 시도하는 사람의 말을 들어야합니다. 누군가가 마침내 연결을하면, 그 클라이언트에 연결하는 소켓과 함께 새로운 전용 스레드를 생성하십시오. 해당 클라이언트가 연결이 끊어지면 (로그 오프하거나 강제 종료) 스레드를 강제 종료하십시오.

클라이언트의 경우 더 간단합니다.
그냥 하나의 스레드가 있고 서버 ip에 연결을 시도하십시오 (단 하나의 서버 만있는 경우 하드 코드를 입력하십시오. 여러 개이면 플레이어에 입력 할 수 있습니다). 그리고 같은 포트를 사용하십시오 서버를 선택했습니다.
소켓을 열 수있는 경우 연결하고 해당 스레드는 서버와의 채팅 전용으로 사용됩니다. 게임 플레이의 지연을 피하려면이 항목이 메인 스레드가 아니어야합니다. 그런 다음 메시지를 보내거나받을 때 주 스레드에 비동기 적으로 전달합니다.
실속을 피하려면 주 스레드가 서버 스레드에서 "대기"하지 않는지 확인하십시오.
대기 대기 시간이 필요한 경우 렌더링 대기열이나 입력 이벤트가 취소되지 않으므로 대기 화면이 좋으므로 프로그램이 응답하지 않는 것으로 표시되지 않습니다.

이제는 연결하려는 무한한 수의 새로운 클라이언트를 처리 할 수 ​​있어야합니다.

이제 각 스레드는 별도의 클라이언트입니다.
그래서 이들을 모두 목록에 보관하십시오. 더 쉬운 패킷 송수신을 처리 할 수있는 일종의 스레드 래퍼 일 가능성이 큽니다. 보안을 원할 경우 핸드 셰이크 패킷을 사용하십시오. 즉, 서버가 "질문을합니다"라는 말을합니다. 클라이언트가 대답하지 않거나 잘못 대답하면 클라이언트가 응답합니다. 또한 금지 된 ips는 악수하기 전에 걷어차 야합니다.

이제 클라이언트 목록에서 일치 요청이 호출되기를 기다리지 만 원하는 경우 대기열로 요청 된 클라이언트를 대기열로 이동하십시오. 충분한 플레이어가 있으면 해당 클라이언트 목록과 일치하는 항목을 시작하십시오. 패킷이 수신되면 목록에있는 다른 모든 플레이어로 패킷을 보냅니다. 예를 들어, 플레이어가 움직이고, 패킷이 보내지고, 서버가 그것을 받고, 목록의 다른 모든 플레이어에게 보내고, 렌더링을 이동하고, 휙휙 움직입니다. 그렇게 빠르지 않으면 플레이어가 실제로 미니 서버처럼 행동하고 서로 완전히 연결할 수 있습니다. 이렇게하면 핑이 두 배 빠르기는하지만 해킹을 감지하기가 더 어려울 수 있습니다. 그러니 조심해.

경기가 끝나면 경기가 종료되었다고 알리는 패킷을 보내고 그 패킷이 도착하면 클라이언트가 화면을 통해 게임을 렌더링하게합니다.

번역한거라 오역이 많지만 의미 전달은 돼네요.