나는 Call of Duty 1의 초기 버전에 대한 IP 금지 도구 작업에 바쁘다. (분명히 이러한 기능은이 버전에서는 구현되지 않았다).같은 포트에있는 서버 폴링 - 스레드와 Java
단일 스레드 응용 프로그램을 완료했지만 여러 서버에서 성능이 충분하지 않아서 스레딩을 구현하려고합니다.
지금 당장 각 서버에는 자체 스레드가 있습니다. Networking 클래스에는 메서드가 있습니다. "GetStatus"-이 메서드는 동기화됩니다. 이 메서드는 DatagramSocket을 사용하여 서버와 통신합니다. 이 방법은 정적이고 동기화되어 있으므로 문제가 발생하지 않고 "주소가 이미 사용 중입니다"라는 예외를 많이받지 않아야합니다.
그러나 두 번째 방법은 "SendMessage"입니다. 이 메서드는 서버에 메시지를 보내도록되어 있습니다. "GetStatus"에서 이미 실행중인 스레드가있을 때 "SendMessage"를 호출 할 수 없다는 것을 어떻게 확인할 수 있습니까? 둘 다 동기화하면 스레드 A가 포트 99999에서 소켓을 열고 "SendMessage"를 호출하는 동안 스레드 B가 동일한 포트에서 소켓을 열고 "GetStatus"를 호출하면 여전히 문제가 발생합니다. (게임 서버는 대개 같은 포트에서 호스팅됩니다.)
나는 정말로 후에 전체 클래스를 동기화하는 방법으로 추측하여 하나의 메서드 만 호출하고 한 번에 하나의 스레드 만 실행할 수 있습니다.
나는이 텍스트에서 분명히 이루고자하는 바를 간절히 원합니다.
도움을 주시면 대단히 감사하겠습니다.
btw, 99999는 유효한 포트가 아닙니다. 포트는 16 비트 부호없는 숫자입니다. – mdma
SendMessage와 GetStatus가 동기화되어 있습니까? – Kiril
포트 99999는 단지 예일뿐입니다. "포트 XXXXX"가 유효한 포트가 아니라고 말했습니까? "Port"은 어떻습니까? –
John