SocketAsyncEventArgs 가 연속된 패킷을 모으는 역할을 하나요?
252
작성한 질문수 3
[테스트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
음~ 이 부분은 강의를 다 완강하신 다음에 질문을 올리시는 쪽이 수월합니다.
정확히 어느 부분에서 질문을 하신 것인지 애매하기 때문인데요.
TCP는 특성상 패킷의 경계가 없어 빠르게 여러 패킷을 보내면,
받는 쪽에서는 뭉쳐서 올 수 있습니다.
하지만 그와는 별개로 실제 게임에서 패킷을 모아 보내는 경우도 있는데 (보내는 쪽에서)
네트워크 헤더를 많이 붙이지 않고 보내면 성능이 좋아지기 때문입니다.
패킷을 모으는 기준은 다양하게 있을 수 있습니다.
보통은 같은 공간 내에 있어서 모두가 동일하게 그 패킷을 받아야 할 경우,
그리고 그 패킷이 다량일 경우 (ex. 이동, 전투 등) 모아서 보내는 경우가 있긴 합니다.
TLS 질문드립니다.
0
51
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
54
2
Unity Span
0
80
2
XML, Dll 차이점
0
109
2
Session 질문입니다
0
81
1
Write Read 커서 키워드
0
77
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
73
2
네트워크 Send 전담 스레드 배치
0
99
2
UnhandledException 으로 서버 터지는 경우
0
88
2
컨텐츠 단, 엔진 단
0
106
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
150
2
유니티6 버전
0
99
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
104
2
C++ 전혀 모르는데 C# 서버
0
170
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
96
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
64
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
193
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
83
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
107
1
스핀락 질문.
0
110
2





