1. 사건의 발단
TCP 연결을 통해 서버와 지속적인 연결이 필요한 Unity 애플리케이션을 강제 종료하면 저 메시지가 뜬다.
(사실 뜨는게 당연하다 <- 이 부분은 나도 이해하고 있다.)
하지만 소켓 오류라는 내용이 마음에 들지가 않아서 오류가 아닌 정상적인 종료로 만들고 싶었습니다.
2. 해결방법 -1
아무튼 유니티 애플리케이션이 종료되거나 객체가 파괴될 때 네트워크 연결을 안전하게 종료하기 위한 코드를 클라에다가 넣으면 소켓 오류라는 보기 안좋은 메시지가 서버 콘솔쪽에 뜨지 않게 되지 않을까?!
열심히 검색을 해보니 Application.wantsToQuit 와 OnWantsToQuit를 찾게 되었다.
내용을 보니 흠... NetworkManager에 추가하면 되겠구만!
- Application.wantsToQuit 이벤트는 Unity 애플리케이션이 종료될 때 호출됩니다. 이 이벤트에 OnWantsToQuit 메서드를 추가하여 종료 전에 특정 작업(여기서는 연결 해제)을 수행하게 합니다.
- OnWantsToQuit 메서드에서 Disconnect()를 호출하여 애플리케이션이 종료되기 전에 네트워크 연결을 끊습니다.
- return true를 통해 애플리케이션이 정상적으로 종료될 수 있도록 합니다.
3. 첫 실패
계속 똑같이 소켓 오류가 뜬다... 다른 이유를 생각해보자!
4. 해결방법 - 2
그렇다면 유니티 애플리케이션이 실행될 때 생성되는 특정 객체가 파괴될 때 네트워크 연결을 안전하게 닫아 리소스를 해제하고 다른 오류를 방지해보자!
다시 열심히 검색을 해보니 OnDestroy와 Disconnect가 있었다!
내용을 보니 오! 해결방법 - 1과 같이써도 무방하겠다!
- OnDestroy는 Unity에서 해당 객체가 파괴될 때 호출되는 메서드입니다. 여기서는 객체가 파괴될 때 Disconnect() 메서드를 호출하여 네트워크 연결을 해제합니다.
- Disconnect 메서드는 tcpClient 객체를 안전하게 종료하고 해제하는 기능을 담당합니다.
- tcpClient.Close()는 TCP 연결을 종료하고, Dispose()는 리소스를 해제하며, tcpClient = null을 통해 객체 참조를 해제합니다.
5. 그냥 실패
클라이언트 에러가 생기던 것은 해결이 되었지만... 소켓 오류 메시지 로그는 사라지지 않는다 내가 무언가 잘못생각한게 분명하다...
6. 결론
현재 상황을 TCP 연결을 통해 서버와 지속적인 연결이 필요한 Unity 애플리케이션에서, 특정 객체가 생성이 되고 연결을 종료할 때 파괴가 되는데 그때 안전한 연결 종료를 보장하면 소켓 오류가 뜨지 않을꺼라고 생각했는데 이 부분이 이제 맞는지도 모르겠다. 또한, 애플리케이션이나 네트워크 객체가 종료되거나 파괴 될 때 예기치 않은 오류나 리소스 누수가 발생할 수 있는 데 이 부분을 클라 코드에 추가하는 것만으로는 소켓 오류 메시지를 삭제하지는 못했다는 것에 대해서 어떻게 하면 저 부분의 에러 코드가 안뜨게 할 수 있는지 모르겠다... 튜터님이 이 글을 읽고 피드백을 주시겠지라는 마음을 가져본다...
'TIL' 카테고리의 다른 글
상태 동기화에 대하여 (1) | 2024.11.07 |
---|---|
스파르타 코딩 클럽 모의 면접 깔끔한 답변 준비 (0) | 2024.11.01 |
게임 프로그래밍과 삼각함수는 무슨연관이 있을까? (5) | 2024.10.30 |
Load Balancing에 대하여 (1) | 2024.10.21 |
대칭키, 비대칭키 암호화에 대하여 (0) | 2024.10.17 |