Inflearn brand logo image

인프런 커뮤니티 질문&답변

Han님의 프로필 이미지
Han

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Session #3

Reference Count of ServerSession

작성

·

67

0

안녕하세요. 강의 항상 즐겁게 보고 있습니다.

강의 중 ClientService 내에서 발생하는 ServerSession의 레퍼런스 카운트 관리에 대해 궁금한 점이 있어 질문드립니다.

제 이해로는, ClientService의 Start 함수에서 session을 명시적으로 hold해주지 않는다면, Session의 ProcessConnect 함수에서 connect event의 owner를 release한 이후에는 해당 session의 레퍼런스 카운트가 0이 되어야 정상이라고 생각했습니다.
그런데 샘플 코드에서는 레퍼런스 카운트가 2 이상으로 유지되고 있는 것을 확인하여, 이에 대한 설명을 부탁드리고 싶습니다.

감사합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. Han님.

ServerSession의 레퍼런스 카운트 관리에 대한 질문 감사드립니다. 이 부분은 네트워크 프로그래밍에서 매우 중요한 개념이며, 관련된 여러 요소가 상호작용하여 작동하기 때문에 이해하기 까다로울 수 있습니다.

레퍼런스 카운트가 2 이상인 이유

ServerSession의 레퍼런스 카운트가 2 이상으로 유지되는 이유는 보통 다음 두 가지 경우 때문입니다:

  1. Session 관리: 일반적으로 Session 객체는 서버의 여러 부분에서 참조됩니다. 예를 들어, Session은 네트워크 이벤트를 처리하고 모든 이벤트에 대해 owner를 자신으로 설정함으로써, 이벤트가 비동기적으로 처리되는 동안 메모리 릭이나 불안정성을 방지하기 때문에, 이벤트의 생명주기 동안 레퍼런스 카운트가 증가하게 됩니다.

  2. 서비스 관리 구조: ClientService 또는 서버의 다른 상위 클래스(또는 관리 클래스)에서 Session 객체를 참조하고 있을 수 있습니다. 이는 연결 관리 및 유지보수를 쉽게 하기 위한 전략입니다. 이로 인해 예상보다 높은 레퍼런스 카운트를 볼 수 있습니다.

관련된 질문과 답변

이러한 개념을 더욱 깊이 이해하기 위해, 다음의 유사한 질문과 답변을 참고하시는 것을 추천드립니다:

  1. [ _maxSessionCount 관련하여 질문드립니다. ] - maxSessionCount와 관련된 이해를 돕는 게시물로, 서버가 세션 및 네트워크 이벤트를 처리하는 방식에 대한 통찰을 제공합니다.

  2. [ Session의 수명 관리를 위한 Ref 카운트 관리 부분 ] - 세션의 수명 관리와 레퍼런스 카운트 관리 방법에 대한 논의가 진행된 질문입니다.

이러한 질문들을 확인하셔서 여러 답변의 논의 내용을 참고하시길 바랍니다. 이러한 개념은 프로그램의 안정성 및 성능을 크게 좌우할 수 있으니 주의 깊게 살펴보는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Han님의 프로필 이미지
Han

작성한 질문수

질문하기