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

유영재님의 프로필 이미지

작성한 질문수

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

Session #1

안녕하세요 선생님 backlog : 최대 대기수 에 대해서 질문 드립니다.

21.02.13 01:19 작성

·

533

2

    class Listener

    {

        Socket _listenSocket;

        Action<Socket> _onAcceptHandler;

        public void Init(IPEndPoint endPoint, Action<Socket> onAcceptHandler)

        {

            // 문지기 생성 : 첫번째 인자에 네트워크 주소를 넣어줌 

            _listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

            _onAcceptHandler += onAcceptHandler;   // 연결

            // 문지기 교육을 시킴 : 식당 주소와 포트번호를 기입

            _listenSocket.Bind(endPoint);

            // 영업 시작 : 리슨 소켓을 리슨 상태로 둔다. 

            // backlog : 최대 대기수 

            _listenSocket.Listen(10);

            // *** 초기화를 하는 시점에 등록을 해줄 것

            // 이 상태에서 클라가 connect 요청이 왔다고 한다면 

            // 콜백 방식으로 OnAcceptCompletd 함수 호출 된다.

            // 비동기 방식으로 예약만 하는 것

            // 낚시대를 10개를 꼽아 놓는다. 물고기가 많으면 ...

            // 문지기 10개 버젼

            for(int i = 0; i<10; i++)

            {

                // 문지기 1 버젼 

                SocketAsyncEventArgs args = new SocketAsyncEventArgs();

                args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted);

                RegisterAccept(args);

            }

        }

수업 예제 코드 중에 Listen 클래스 를 작성하실 때

리슨 소켓 하나 만들어주고 그놈을 서버 컴퓨터에 바인딩을

시켜준다음

리슨 함수를 호출해 주고, 이상태에서 클라쪽에서 신호가 오면 그 다음 처리를 해주는 코드 설명이셨는데

여기서 리슨 함수 인자를 10으로 놓고

for문을 10번 반복 하셔서 문지기를 10개를 생성하셨습니다.

질문 : 최대대기수가 10이라는 얘기는

클라이언트가 10명이 접속 한다는 얘기 인가요?

그래서 문지기를 10개를 생성 해주셨는지

이게 맞다면 클라이언트 접속이 대략 1000명을 예상한다면

리슨 함수 인자로 1000을 넣어줘야 하나요? 

답변 2

2

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

2021. 02. 13. 01:25

질문 : 최대대기수가 10이라는 얘기는 클라이언트가 10명이 접속 한다는 얘기 인가요?

-> 그렇지 않습니다.

식당에서 실시간으로 사람들이 몰리면 대기열이 있고
보통 앉아서 기다릴 수 있는 의자들이 현관문에 있을텐데요.
그런 개념이 backlog라고 보시면 됩니다.
동접 1000명이라고 해도 정말 동일한 시점에 딱! 1000명에 입장할 일은 없을테니
그 정도로 크게 backlog를 잡지는 않습니다.

0

유영재님의 프로필 이미지
유영재
질문자

2021. 02. 13. 01:51

정말 비유를 잘 들어 주시네요 감사합니다. ^^ 이해했습니다.