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

먹물크림빵님의 프로필 이미지
먹물크림빵

작성한 질문수

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

SendBuffer

sendQueue에 1개 이상 쌓이는 이유

작성

·

287

0

안녕하세요 선생님

디버깅을 해봤는데 생각한대로 잘되지않아서

 _sendQueue 버퍼가 쌓이는 방식이 제가 이해한게 맞는건지 의문이 들어서 질문드립니다.

일단 send()에서 _sendQueue에 버퍼를 넣어주고 _sendRegistered를 true 변경후  RegisterSend()를 호출합니다. 그리고 _sendQueue를 모두 비운후 WSASend까지 성공을하면 send()에서 걸었던 lock이 해제가 됩니다.

그후에는 다른 쓰레드에서 동일한 세션으로 send를 요청할경우 send()를 받고 _sendQueue에 버플 넣을수는 있으나 ProcessSend()에서 _sendRegistered를 false로 변경하지않았을경우 send()에서 RegisterSend()를 호출할수 없습니다. 그후 기존에 send가 진행되고 있던 쓰레드가 실행될경우 ProcessSend()에서 바로 RegisterSend()함수를 호출하게 되고 그때는 _sendQueue에 쌓여있는 버퍼를 볼수있게 됩니다.

제가 이해한게 맞는건가 싶어 질문드립니다.

답변 1

0

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

네 맞습니다.
실제 전송 함수는 딱 1개 쓰레드만 담당하게 하려고 저렇게 한겁니다.
저렇게 하지 않고 매 번 실제 전송하는 코드도 본 적이 있었는데
그럴 경우 sendEvent를 재사용하면 안 되고 매 번 새로 만들어줘야 합니다.
개인적으로 MMO 기준으로는 반응속도보다는 효율성이 더 중요하니, 전자가 낫다고 생각합니다.

먹물크림빵님의 프로필 이미지
먹물크림빵

작성한 질문수

질문하기