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

baljang님의 프로필 이미지
baljang

작성한 질문수

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

SendBuffer

안에 있다는 말이 엔진단 안에 있다는 말씀이신가요?

작성

·

509

0

recvBuffer는 안에 있어서 Session마다 고유한 recvBuffer를 갖고 있다고 하실 때 안에 있다는 말은 ServerCore안 즉 엔진단 안에 있다는 말씀이신가요?

설명하실 때 안에 있다 언급하실 떄 마다 엔진단 안이라고 이해하고 있었는데 맞게 이해하고 있는 건가요?

답변 1

1

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

Session마다 고유하게 자신의 RecvBuffer를 갖고 있다는 의미입니다.
반면 SendBuffer는 모두가 공유해서 사용하는 공공 물품이고요.

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

SendBuffer: Server 컨텐츠 단에서 생성되는 SendBuffer는 공용으로 사용됩니다. 왜냐하면, GameSession 클래스 내의 OnConnected 메서드에서 SendBufferHelper를 사용하여 SendBuffer를 생성하고 있습니다. SendBufferHelper는 모든 세션에서 공유되는 공용 리소스이기 때문에 생성된 SendBuffer도 공용으로 취급됩니다. 이렇게 공용으로 사용되는 SendBuffer를 통해 서버는 각 세션에 동일한 데이터를 보낼 수 있습니다.

RecvBuffer: RecvBuffer 클래스의 생성자에서 _buffer는 각 세션마다 고유한 데이터를 가지게 됩니다. 이유는, RecvBuffer 클래스의 인스턴스가 세션마다 생성되기 때문입니다. 클래스에서 _buffer는 새로운 인스턴스가 생성될 때마다 독립적으로 초기화되므로, 각 세션의 RecvBuffer 인스턴스는 고유한 _buffer를 갖게 됩니다. 이렇게 각 세션마다 고유한 RecvBuffer를 통해 서버는 각 클라이언트로부터 데이터를 독립적으로 수신할 수 있습니다.

Chat GPT에게 부연설명을 부탁해 봤는데요 2번은 확실히 이해가 됐는데 1번은 맞는 설명인가요?

원래 코드인

namespace Server

{

class GameSession : Session

{

public override void OnConnected(EndPoint endPoint)

{

Console.WriteLine($"OnConnected : {endPoint}");

byte[] sendBuff = Encoding.UTF8.GetBytes("Welcome to MMORPG Server !!");

Send(sendBuff);

Thread.Sleep(5000);

Disconnect();

}

여기서는 SendBufferHelper를 사용 안했는데도 공용으로 사용되는 건가요?

sendBuff는 공용이 아닙니다. 각 세션마다 고유하게 생성되는 이유는 OnConnected 메서드가 각 클라이언트가 연결될 때마다 호출되기 때문입니다. 라고 ChatGPT는 답을 하는데 sendBuff가 SendBuffer 클래스 바깥에서 생성되면 공용이 되는 이유가 이해가 잘 안되네요ㅠㅜ

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

아 공용이라는게 public, private같이 접근성의 의미가 아니라 sendBuff는 세팅한 다음에 Send에 넣어주기만 하는게 편하니까 여러번 쓸 수 있다는 의미의 공용이었군요. 제가 이해한게 맞나요?

baljang님의 프로필 이미지
baljang

작성한 질문수

질문하기