• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Listener 관련 질문

22.04.10 20:04 작성 조회수 192

0

강의 내 1:45초쯤 더 많은 손님을 받을수 있도록 Listener에 for문을 추가하였습니다.

RegisterAccept -> (socket.AcceptAsync) -> OnAcceptCompleted -> RegisterAccept로 이어지는 loop가 10개 생성되었다고 이해했습니다.

그렇다면 하나의 ListenSocket에 10개의 loop가 묶여있는 상태에서 client로부터 온 소켓들이 어떻게 하나씩 배치될수 있나요?  다른 loop에 같은 소켓이 배치될수도 있을것 같은데 아무리 생각해도 이 부분이 이해가 잘 안가서 질문드립니다.

강의 잘 수강하고 있습니다. 감사합니다.

답변 2

·

답변을 작성해보세요.

0

한종훈님의 프로필

한종훈

질문자

2022.04.11

답변 감사합니다

혹시라도 운이 없어서 하나의 물고기에 2개 이상의 낚시대가 반응 (args.completed 이벤트 발생)할수도 있다고 생각했는데 그러한 일이 발생할수도 있나요? 

그럴 순 없습니다!

한종훈님의 프로필

한종훈

질문자

2022.04.12

감사합니다

0

애당초 클라에 배치되는건 listenSocket이 아니고, 별도로 소켓을 만들어줍니다.
listenSocket은 정말로 문지기의 영업용 휴대폰 같은 개념이고 손님들과는 무관합니다.

한종훈님의 프로필

한종훈

질문자

2022.04.11

답변 감사합니다

수업중

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개 동시에 물에 넣는 것과 유사합니다.