내가 만들고있는 게임을위한 C# 서버를 만들고 멀티 스레딩 및 소켓 프로그래밍에 익숙하지 않습니다. 내 서버는 여러 개의 클라이언트를 모두 별도의 스레드로 유지할 수 있어야합니다. 내 서버는 콘솔 응용 프로그램으로 실행됩니다. 내 유일한 문제는 내 테스트 클라이언트 중 하나가 응용 프로그램을 종료 할 때 실행중인 스레드를 중지하는 방법을 모른다는 것입니다. 어떻게 실행중인 스레드를 중지합니까?게임 서버 멀티 스레딩 오류
0
A
답변
0
당신의 스레드는 기본적으로 클라이언트로부터의 요청을 기다린 후 응답을 처리하는 메시지 처리 스레드라고 가정합니다. 이 경우 스레드의 기본 루프는 아래의 HandleClientRequests 메소드와 비슷하게 보일 수 있습니다. 이 예에서는 정상적인 연결 해제를 가정합니다. 또한 강력한 구현은 클라이언트가 적절한 종료 시퀀스를 실행하지 않고 연결을 끊거나 연결이 실패 할 가능성을 설명합니다. 경우, 당신은 방법 ThreadStart하든
public class ClientConnection {
private Socket _socket;
public ClientConnection(Socket socket) {
_socket = socket;
new Thread(HandleClientRequests);
}
/* snip */
public void HandleClientRequests() {
bool disconnectRequested = false;
while(!disconnectRequested) {
var message = ReadNextMessageFromSocket();
if(message.Type == MessageType.CloseConnection) {
disconnectRequested = true;
} else {
//service request and send response
}
}
ShutdownConnection();
//after this point the thread terminates
}
}
은 일반적으로 당신이 당신이 당신의 스레드가 원하는 무엇이든 할 수있는 내에서 루프의 어떤 종류를해야하고, 그 루프는 신호하는 데 사용되는 조건이 있어야합니다 스레드가 종료 될 시간입니다.
0
스레드는 함수가 반환 될 때 끝납니다. 스레드는 클라이언트가 멀리 떨어져 스레드 루프에서 벗어 났음을 인식해야합니다.
관련 문제
- 1. 멀티 플레이어 게임 서버
- 2. 멀티 스레딩
- 3. iPhone "멀티 스레딩"질문
- 4. C# 소켓 기반 멀티 스레딩 서버 테스트
- 5. 멀티 스레딩 및 멀티 태스킹
- 6. iPhone : 멀티 태스킹, 멀티 스레딩?
- 7. 멀티 스레딩 질문
- 8. 멀티 플레이어 게임 개발
- 9. 멀티 스레딩 프로그래밍
- 10. 멀티 스레딩 vs 프로세스
- 11. NXT를 사용한 멀티 스레딩
- 12. Cherrypy 멀티 스레딩 예제
- 13. 멀티 스레딩 함수 호출
- 14. 다른 스크립트를 멀티 스레딩
- 15. Bash의 멀티 스레딩
- 16. 부스트 멀티 스레딩
- 17. 아이폰 네트워크 멀티 스레딩
- 18. webClient Bot - 멀티 스레딩
- 19. 멀티 스레딩 성능 문제
- 20. LINQ Changeset 멀티 스레딩
- 21. 자바 멀티 스레딩 문제
- 22. 멀티 스레딩 테스트
- 23. 멀티 스레딩 캡처 비디오
- 24. PHP의 멀티 스레딩
- 25. 스프링 및 멀티 스레딩
- 26. Java의 멀티 스레딩
- 27. PHP에서 멀티 스레딩
- 28. 멀티 스레딩 문제
- 29. 멀티 스레딩 솔루션
- 30. tcplistener를 사용하는 멀티 스레딩
클라이언트 당 스레드를 사용하면 안됩니다. [뻔뻔한 플러그] (http://jonathan.dickinsons.co.za/blog/2011/02/net-sockets-and-you/) - try/catch는 스레드를 '끝내는 곳'입니다. –