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

asoft82님의 프로필 이미지
asoft82

작성한 질문수

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

Session #2

SocketAsyncEventArgs 가 연속된 패킷을 모으는 역할을 하나요?

작성

·

194

0

[테스트1]

아래 처럼 클라이언트에서 Send를 5번 하는데

for (int i = 0; i < 5; i++)
{
    byte[] sendBuffer = Encoding.UTF8.GetBytes($"Hello World! {i} ");
    int sendByte = socket.Send(sendBuffer);
}

 

강의 결과 화면처럼 서버에서는 5번의 Send 패킷을 모았다가 출력하는 모습을 볼 수 있습니다.

 

[테스트2]

아래에서도 마찬가지로 Send를 5번 하는데,

1초 딜레이를 주고 실행했습니다.

for (int i = 0; i < 5; i++)
{
    byte[] sendBuffer = Encoding.UTF8.GetBytes($"{i} ");
    int sendByte = socket.Send(sendBuffer);
    Thread.Sleep(1000);
}

 

이때는 서버에서 패킷을 모을 시간이 없었던건지,

Send 패킷을 안모으고 출력하는 모습을 볼 수 있습니다.

 

 

[질문]

서버에서 패킷을 모으는 역할을 하는 것이 무엇인가요?

SocketAsyncEventArgs 인가요?

그리고 패킷을 모으는 기준이 무엇인지 궁금합니다.

시간인가요? 아니면 끊임 없이 연속적으로 보내지는 패킷인가요? 아니면 다른 무엇인가요?

SocketAsyncEventArgs recvArgs = new SocketAsyncEventArgs();
recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted);
recvArgs.SetBuffer(new byte[1024], 0, 1024);

답변 1

0

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

음~ 이 부분은 강의를 다 완강하신 다음에 질문을 올리시는 쪽이 수월합니다.
정확히 어느 부분에서 질문을 하신 것인지 애매하기 때문인데요.

TCP는 특성상 패킷의 경계가 없어 빠르게 여러 패킷을 보내면,
받는 쪽에서는 뭉쳐서 올 수 있습니다.
하지만 그와는 별개로 실제 게임에서 패킷을 모아 보내는 경우도 있는데 (보내는 쪽에서)
네트워크 헤더를 많이 붙이지 않고 보내면 성능이 좋아지기 때문입니다.

패킷을 모으는 기준은 다양하게 있을 수 있습니다.
보통은 같은 공간 내에 있어서 모두가 동일하게 그 패킷을 받아야 할 경우,
그리고 그 패킷이 다량일 경우 (ex. 이동, 전투 등) 모아서 보내는 경우가 있긴 합니다.

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

답변이 되었습니다. TCP 부분을 포함하여 완강하면 의문점이 해소 될 것 같습니다.

asoft82님의 프로필 이미지
asoft82

작성한 질문수

질문하기