넷 코드가 게임 엔진에 "연결"할 수있는 여러 가지 방법을 평가하고 싶습니다. 나는 지금 멀티 플레이어 게임을 디자인하고 있으며, 지금까지 그래픽 루프와 스크립팅을 처리하는 엔진의 나머지 부분과는 별개로 네트워크 소켓을 처리하기 위해 별도의 스레드가 필요하다고 결정했습니다.
네트워크 게임을 완전히 단일 스레드로 만드는 하나의 잠재적 인 방법이 있었는데, 이는 비 차단 소켓을 사용하여 각 프레임을 렌더링 한 후 네트워크를 확인하는 것입니다. 그러나 이는 프레임을 렌더링하는 데 걸리는 시간이 네트워크 지연에 추가되기 때문에 분명히 최적이 아닙니다. 네트워크를 통해 도착하는 메시지는 현재 프레임 렌더링 (및 게임 논리)이 완료 될 때까지 기다려야합니다. 그러나 적어도 이런 식으로 게임 플레이는 여전히 매끄럽게 진행됩니다.
네트워킹을위한 별도의 스레드가 있으면 게임이 네트워크에 완전히 응답 할 수 있습니다. 예를 들어 서버에서 상태 업데이트를 수신하면 즉시 ACK 패킷을 다시 보낼 수 있습니다. 그러나 나는 게임 코드와 네트워크 코드 사이에서 통신하는 가장 좋은 방법에 대해 약간 혼란스러워합니다. 네트워킹 스레드는 수신 된 패킷을 큐로 푸시하고 루프 동안 적절한 시간에 큐에서 게임 스레드를 읽으므로이 최대 1 프레임 지연을 제거하지 못했습니다.
또한 패킷 전송을 처리하는 스레드가 파이프로 내려 오는 패킷을 확인하는 스레드와 분리되도록하려는 것처럼 보입니다. 수신 메시지가 있는지 확인 기능 select
이나 비슷한 기능에 대해 생각하고 있습니다 .
내 질문은 최고의 네트워크 응답 성을 위해 게임을 디자인하는 가장 좋은 방법은 무엇입니까? 분명히 클라이언트는 가능한 한 빨리 서버에 사용자 입력을 보내야하므로 게임 루프 내부에서 이벤트 처리 루프 직후에 네트 센드 코드를 가져올 수 있습니다. 이것은 말이됩니까?