내 멀티 플레이어 게임에서 서버 - 클라이언트 통신 구조를 연구 중입니다.멀티 플레이어 게임용 멀티 캐스트
패킷을 잃어 버렸을 때 응용 프로그램을 차단하지 않는 "촬영 및 잊어"방법을 사용하기 때문에 UDP가 최상의 선택이라는 결론에 도달했습니다. 또한 TCP를 사용하여 서버의 변경, 맵 변경, 업데이트 등의 로그인 절차 및 정보 교환과 같이 패킷이 필요한 안정성을 보냅니다. IRC 기반 채팅도 실행합니다. (모든 명령은 실제로 IRC 스타일의 사용자 정의 메시지입니다).
저는 서버와 클라이언트 간의 상호 작용 메시지 (동작, 주문, 객체, 동작 등)를 보내는 가장 좋은 방법이 무엇인지 궁금합니다.
일부 설명서를 읽다가 MulticastSocket을 방문했습니다.
내 질문은 :
각에서는 DatagramSockets 각각의 새를 보내는 큐를들을 곳 (I은 TCP 통신에서처럼) 각 선수에 대한 스레드를 시작하는 모든 고객에게 정보의 지속적인 흐름을 전송하는 것이 좋습니다 메시지를 클라이언트에 보냅니다. 이것은 모든지도와 모든 움직임 (지도 위에 50 명의 플레이어가있을 수 있다고 가정)이 모든 플레이어에게 보내지고, 모든 패킷이 모든 정보를 포함하기 위해 커야 함을 의미합니다. 또는 각 맵에 대해 스레드를 사용하는 것이 좋습니다. 일부 플레이어가 특정 맵에 있거나 멀티 캐스트 통신을 사용하여 해당 맵에있는 플레이어에게만 메시지를 보내고 MulticastSocket으로 수신하는 경우에만 활성화됩니다.
멀티 캐스트를 사용하는 방화벽이나 라우터의 문제에 대해 읽었지만 이러한 문제가 (정상적인 UDP와는 다른) 무엇인지 파악할 수 없습니다.
응용 프로그램
은 몇 가지 구성 문제를 가진 사람에 의해 사용되어야한다. 당신이 TCP 연결이 TCP 연결 당 하나 개의 스레드를 필요로 응용 프로그램이 절대적으로 TCP 연결을 필요로하는 경우 (NIO를 사용하지 않는 한), 예외를 결정하지 할 필요가 위의 시나리오를 보면
일부 라우터는 네트워크에서 원하지 않는 트래픽을 유발할 수 있으므로 멀티 캐스트 패킷을 차단하도록 구성됩니다. 와일드 카드 주소를 사용하여 네트워크 전체에서 더미 멀티 캐스트 패킷을 스팸하는 악의적 인 사용자를 상상해보십시오. 패킷의 범위 또한 중요합니다. 패킷은 사설 LAN과 같은 소규모 네트워크에 비해 더 큰 네트워크 (예 : 인터넷)에있는 경우 도달 할 가능성이 적습니다. 이것이 (여전히 멀티 캐스트를 사용하면서) 피할 수 있는지 여부에 관해서는, 나는 당신에게 좋은 대답을 줄 수 없다. – initramfs
나는 멀티 캐스트를 고집하지 않고있다. 실제로 UDP가있는 통신 서버 클라이언트를 만드는 가장 좋은 방법은 무엇인가에 관한 것이므로 문제없이 바꿀 수있다. 아마도 멀티 캐스트 소켓을 에뮬레이트하는 클래스를 만들 수 있습니다. 동일한 패킷을 한 번에 여러 클라이언트에 전송할 수 있습니까? 그러나 그것이 충분히 빠를 것인지 나는 모른다. 귀하의 의견을 보내 주셔서 감사합니다 – Gianmarco
나는 속도보다 대역폭에 더 염려됩니다. 멀티 캐스트 패킷은 연결 당 패킷이 필요한 기존의 네트워크 구조와 비교하여 한 번 전송됩니다.서버에 50 명의 플레이어가있는 경우 연결된 단일 사용자와 비교하여 50x 대역폭을 고려해야합니다. 나는 멀티 캐스트 패킷에 대한 나의 통찰력만을 제공했다. – initramfs