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

toyboy0113님의 프로필 이미지

작성한 질문수

[Rookiss 켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)

서버 프레임워크

SocketAsyncEventArgs Pooling

해결된 질문

24.08.18 00:28 작성

·

56

0

안녕하세요 강의 참고하면서 서버 만들어 보고 있는데
https://learn.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socketasynceventargs?view=net-8.0#remarks


해당 문서에서 pooling이 있더라구요 생각해보니 동접이 꽤 많다라고 가정하면(약 3000?) 이 SocketAsyncEventArgs 생성 소멸이 많이 일어난다고 생각했습니다.

그래서 pooling을 한번 만들어보고 있는데 만드는 중에 Dispose를 언제 해줘야 할지 감이 잘 안옵니다.

현재는 Client가 Disconnect될 때 Push하게 되는데 Push에서 poolCount가 3000이 넘으면 이걸 AllClear라는걸로 pool에 있는 SocketAsyncEventArgs를 다 Dispose해주는 상황인데 이렇게하면 3000이 넘기 전까지는 메모리에 계속 남아 있으니 먼가 찜찜합니다.

이런 문제가 있는데 좋은 해결책이 있을까요?
감사합니다!

답변 1

1

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

2024. 08. 18. 00:40

우선 현재 M2 서버에서는
Session 쪽에 제일 많이 사용하는 read/write 관련된 AsyncEventArg를
멤버 변수로 들고 있으면서 계속 재사용합니다. (사실 이게 풀링보다 상위 호환이죠!)
따라서 생각보다 풀링을 적용하더라도 별다른 차이가 일어나지 않을 확률이 높습니다.
Session 생성/소멸은 아주 빈번하게 일어나는 것이 아니기 때문이죠.
풀링을 한다면 차라리 Session을 풀링해서 몇 천개를 미리 만들어놓는 것을 고려할 수는 있겠네요.