강의

멘토링

커뮤니티

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

wlfansdl님의 프로필 이미지
wlfansdl

작성한 질문수

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

Listner 구현 관련

해결된 질문

작성

·

205

0

// 그렇지만 pending true인 경우, 즉 지연 된 경우
// AcceptAsync가 완료 되었을 때(클라이언트 소켓이 들어왔을 때) 우리에게 무엇을 보내주도록 맞춰주어야한다.
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted);
RegisterAccept(args);



안녕하세요,  Listener 강의 12분 40초 쯤에서

1. " AcceptAsync가 완료 되었을 때 우리에게 무엇을 보내주도록 맞춰주어야한다. " 라고 말씀하셨는데요.
여기서 완료가 의미하는 것이 클라이언트 소켓이 들어올때 말씀하신거 맞나요 ?

2. 그래서 pending이 true면 RegisterAccept()는 호출이 끝나서 메인쓰레드로 들어가고
메인쓰레드는 무한루프로 돌다가 AcceptAsync가 완료되어 이벤트가 호출되면
또다른 작업스레드가 켜지면서 이벤트 핸들러에 등록된 함수를 처리하고
작업쓰레드와 메인쓰레드(while문 무한루프)가 번갈아가면서 실행된다.
맞을까요 ?

3. 제 생각이 맞다면 새로운 작업 쓰레드와 메인쓰레드는 번갈아가면서 실행될텐데 메인쓰레드에서 이벤트가 발생될 때 새로운 작업 쓰레드가 끝나길 기다리는 Join 함수 같은 것은 따로 없나요?


답변 1

1

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

1+2
네 그렇습니다

3. 제 생각이 맞다면 새로운 작업 쓰레드와 메인쓰레드는 번갈아가면서 실행될텐데 메인쓰레드에서 이벤트가 발생될 때 새로운 작업 쓰레드가 끝나길 기다리는 Join 함수 같은 것은 따로 없나요?

C++서버라면 그렇게 해야 하는데,
C# 서버에서는 자체 관리하는 쓰레드풀에서 쓰레드를 꺼내서
일감을 처리하고 알아서 종료되면 쓰레드풀에서 회수해갑니다.

wlfansdl님의 프로필 이미지
wlfansdl

작성한 질문수

질문하기