inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Series Phát triển Game MMORPG với C# và Unity] Part4: Game Server

PacketSession

안녕하세요 강의 잘듣고있습니다~ [해결했습니다]

169

k ch

56 câu hỏi đã được viết

0

PacketSession OnRecv 마지막부분에

image.png

buffer에서 패킷의 사이즈 만큼 자르고

buffer의 사용하지 않은부분은 buffer에 다가 새로 만들어서 넣어주고 있는데요

여기서 저걸 왜 다시 넣어야 하는지 이해가 안갑니다.

왜냐하면 읽은 데이터량만큼 processLen을 증가시켰고

processLen을 반환하면 read커서가 그만큼 증가하게 되고

image.png

이부분에서 readPos증가한만큼 new로 새로 만들어서 가져오는데 말이죠..

 

굳이 필요가 없을거 같은데 맞나요..?

C# unity 네트워크

Câu trả lời 2

0

k ch

계속 생각해보니 buffer를 새로 찝어줘야 while반복문을 타서

image.png

위로 올라가 또다시 다음패킷을 헤더부터 파싱하는거였습니다.

 

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. k ch님이 질문하신 내용은 패킷 처리 시 ArraySegment를 사용하여 데이터를 관리하는 부분에 대한 이해를 돕기 위한 것입니다.

우선, ArraySegment<byte>는 배열의 특정 부분을 참조하게 해주는 구조체입니다. 이를 통해 메모리를 효율적으로 관리하면서도 데이터의 부분을 ‘찝어서’ 사용할 수 있습니다.

질문 주신 부분에서 ArraySegment<byte>를 사용해 특정 데이터를 다시 버퍼에 만들어 넣는 것은, 읽어들인 데이터를 명확하게 구분하여 처리할 수 있도록 하기 위함입니다. 즉, 패킷의 시작과 끝을 명확히 하고, 나중에 어떤 데이터가 처리되었는지를 추적할 수 있도록 하는 것입니다. 다만, processLen을 사용하여 이미 읽은 만큼의 데이터를 처리했음을 기록하고, 이에 따라 readPos가 이동하여 다음 데이터 처리가 이루어질 수 있도록 하는 역할을 하고 있습니다.

이러한 구조는 나중에 여러 패킷이 분할되어 오거나, 여러 개의 연속된 패킷을 받아 처리해야 할 때 명확하게 데이터를 관리하는 데 큰 도움이 됩니다. 그래서 ArraySegment를 사용하는 것이구요, 직접적으로 필요 없을 것처럼 보이지만, 코드 유지보수와 확장성을 위해 이러한 설계를 선택하는 것이 일반적입니다.

더 구체적인 설명이나 추가적인 질문이 필요하시면, 학습 자료를 함께 검토해 보시면 이해에 더 도움이 되실 것 같습니다.

유사한 질문과 답변은 다음 링크들에서 확인해보실 수 있습니다:
- RecvBuffer
- 패킷조립순서
- 9분 OnRecv질문입니다.

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

TLS 질문드립니다.

0

57

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

57

2

Unity Span

0

82

2

XML, Dll 차이점

0

111

2

Session 질문입니다

0

84

1

Write Read 커서 키워드

0

79

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

76

2

네트워크 Send 전담 스레드 배치

0

100

2

UnhandledException 으로 서버 터지는 경우

0

91

2

컨텐츠 단, 엔진 단

0

108

1

질문 있습니다

0

78

2

C# 게임서버 3D MMORPG

0

153

2

유니티6 버전

0

100

2

receive하는 부분과 send하는 부분의 차이

0

135

2

커서의 위치의 중요성

0

105

2

C++ 전혀 모르는데 C# 서버

0

171

2

강의에 질문이 있습니다

0

89

2

멀티스레드 이해도 질문

0

98

1

500 vs 500

0

132

3

OnAcceptHandler 액션 함수

0

64

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

194

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

84

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

107

1

스핀락 질문.

0

111

2