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

Park SungEun님의 프로필 이미지

작성한 질문수

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

IocpCore

질문있습니다!

작성

·

353

0

안녕하세요 루키스님.

흐름을 이해하던 중에 이해가 안가는 부분이 있어서 질문드립니다.

 

Accept부분에서 다음 그림의 순서로 흐름을 이해를 했는데

이해가 안되는건

Listner의 ProcessAccept부분에서
session 가져와서 그 안의 소켓, 네트워크정보 업뎃해놓고

그 다음 실행 부분인 RegisterAccept에서

새로운 session으로 밀어넣으면

 

ProcessAccept부분에서 업데이트 했던 정보들이 다 날아가는것 아닌가 라는 의문점이 생겼습니다!!

 

제가 이해한게 맞다면 이 흐름대로 해버리면

RegisterAccept에서 작업했던 session의 소켓 정보, 네트워크 정보는 다 날라가고

새로운 session으로 등록해버린거 아닌가요??

 

 

 

 

 

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 이해하신게 맞는데 의도한 상황이구요.
RegisterAccept->ProcessAccept은 무한 반복으로 진행되는 것이라서
Process -> Register 순서라고 보시면 안됩니다.
오히려 입구가 Register인 것에 가깝고, 이를 저는 낚시대에 비유를 하는데요.

낚시대를 던지기 전에 미끼를 끼워넣고, 낚시대를 던지고.
입질이 오면 당겨서 낚시대를 회수할텐데,
그 흐름과 비슷합니다.

Register는 미끼를 끼워넣는 단계 (즉 정말 새로운 세션을 만드는 것)
Process는 낚시대를 회수해서 물고기를 손질하는 단계 (세션을 매니저에 처리, 컨텐츠 관련 부분)
요렇게 구분하시면 됩니다.

Park SungEun님의 프로필 이미지
Park SungEun
질문자

감사합니다!! 완벽하게 이해했습니다

0

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

Park SungEun님의 질문에 대해 적합한 답변을 찾기 위해 노력했습니다. 질문하신 내용에 대해 “AcceptEvent를 하나만 사용할 때 세션 관리”와 관련된 이야기로 보입니다. 특히, 세션 정보 업데이트 후 새로운 세션으로 등록하는 과정에서의 데이터 유지에 대한 궁금증을 갖고 계신 것 같습니다.

이와 관련하여 이전에 지식공유자인 Rookiss님이 답변한 내용이 있어 이를 참고하시면 도움이 될 것 같습니다.

  • “AcceptEvent를 하나만 사용할때 세션관리”에서는 Listener가 Session을 입장시킨 후, 해당 Session을 바로 세션 매니저 등에 넘겨주고 다음 손님을 받으러 가는 과정을 설명하고 있습니다. 즉, Session당 문지기도 1:1 개수를 배치해야 하는 상황을 피할 수 있다는 점에서 좋은 상황임을 설명합니다.

이 답변은 사실 Accept와 Register 과정에서 각 세션의 정보가 어떻게 처리되며, 어떻게 다음 손님을 받을 준비를 하게 되는지에 대한 설명을 담고 있습니다. Park SungEun님이 제기한 궁금증과 직접적으로 관련된 내용이 해당 설명에서 다루어지고 있으며, Listener와 Session 관리 방법에 대해 이해를 돕고 있습니다.

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

Park SungEun님의 프로필 이미지
Park SungEun
질문자

아...!!

제가 IocpCore와 Listener흐름을 동일시 생각해서 착각을 한 것 같은데..

 

그러면

리스너가 일감 확인용 낚시대 던짐 (RegisterAccept)


클라가 접속 시도 -> CP에 Accept일감 등록됨

->리스너의 Dispatch연결 -> ProcessAccept해서 이때 Session정보 업뎃해주고 Session 매니저한테 관리해달라고 넘겨줌

-> 다시 RegisterAccept에서 AcceptEvent 세션 정보 초기화 해버리고 낚시대 던짐.

 

이 흐름인것이고

메인 서버 쓰레드 시작하자마자 서버는 바로 낚시대 (RegisterAccept)를 던진 상황인거구요.

 

저는 RegisterAccept가 정보업뎃하고 호출되어서 굳이 저장한 정보를 지운다고 생각했는데 그게 아니라 시작하자마자 낚시대는 던진 상태이고

CP에 일감생기면(낚시대에 걸림) -> 리스너에서 일감 처리 -> 다시 낚시대 던짐 !!!

이제 이해했습니다!