인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

bbd님의 프로필 이미지
bbd

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

SendBuffer

SendBufferHelper 클래스의 threadlocal

작성

·

295

0

recvbuffer는 static으로 두지 않는이유가 있을까요..? 

그리고, SendBufferHelper를 한 스레드에서 Open을 끝낸후 Close를 하기전에 다른 스레드가 Open을 하는 경우도 있나요?

답변 2

1

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

recvbuffer는 세션마다 고유하게 갖고 있어야 합니다.
게임에 접속한 사용자마다 하는 행동이 다를테니
각각 서버에 보내는 패킷도 다르기 때문이죠.

그리고 TCP에서 이 사람 저 사람이 보낸 데이터가 뒤섞이면 안 되는 이유는
TCP 패킷 특성상 1000바이트를 전송해도
1000바이트가 한 번에 오지 않고 200바이트씩 5번에 걸쳐 올 수 있기 때문입니다.
따라서 세션마다 Recv 버퍼를 따로 두고 관리를 해서
완성된 패킷이 오면 해당 내용을 분석하고 실행하는 식으로 진행해야 합니다.

SendBuffer에는 당연히  말씀하신 멀티쓰레드 문제가 있습니다.
그리하여 귀찮지만 TLS를 사용한거죠. (TLS은 쓰레드마다 고유함)

0

bbd님의 프로필 이미지
bbd
질문자

아아 .. TLS를 잘못 이해하고 있었네요 감사합니다!

bbd님의 프로필 이미지
bbd

작성한 질문수

질문하기