작성
·
263
0
강의 내 1:45초쯤 더 많은 손님을 받을수 있도록 Listener에 for문을 추가하였습니다.
RegisterAccept -> (socket.AcceptAsync) -> OnAcceptCompleted -> RegisterAccept로 이어지는 loop가 10개 생성되었다고 이해했습니다.
그렇다면 하나의 ListenSocket에 10개의 loop가 묶여있는 상태에서 client로부터 온 소켓들이 어떻게 하나씩 배치될수 있나요? 다른 loop에 같은 소켓이 배치될수도 있을것 같은데 아무리 생각해도 이 부분이 이해가 잘 안가서 질문드립니다.
강의 잘 수강하고 있습니다. 감사합니다.
답변 2
0
애당초 클라에 배치되는건 listenSocket이 아니고, 별도로 소켓을 만들어줍니다.
listenSocket은 정말로 문지기의 영업용 휴대폰 같은 개념이고 손님들과는 무관합니다.
답변 감사합니다
수업중
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += new EventHandler<SocketAsyncEventArgs> (OnAcceptCompleted);
RegisterAccept(args);
에서 for문을 추가하여
for (int i = 0; i < register; i++)
{
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += new EventHandler<SocketAsyncEventArgs> (OnAcceptCompleted);
RegisterAccept(args);
}
으로 Listener가 더 많은 손님을 받을수 있도록 변경하셨다고 하였는데 이부분이 잘 이해가 되지 않습니다.
감사합니다
RegisterAccept 코드에서 실제로 Accept 비동기 코드를 실행하는데,
1번 호출했으면 1번 손님을 받고 끝나는겁니다. (다시 Register하기 전까진)
낚시에 비유하면 낚시대가 1개라면 물고기도 한 번에 딱 한마리만 낚을 수 있겠죠?
그리고 물고기를 끌어올린 다음에 다시 낚시대를 던져서 낚시를 이어나가게 될겁니다.
for문으로 SocketEventArgs를 여러개 만들어 Register를 다수 실행하는 것은
마치 낚시대를 10개 동시에 물에 넣는 것과 유사합니다.
그럴 순 없습니다!