21.02.13 01:19 작성
·
532
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
2021. 02. 13. 01:25
질문 : 최대대기수가 10이라는 얘기는 클라이언트가 10명이 접속 한다는 얘기 인가요?
-> 그렇지 않습니다.
식당에서 실시간으로 사람들이 몰리면 대기열이 있고
보통 앉아서 기다릴 수 있는 의자들이 현관문에 있을텐데요.
그런 개념이 backlog라고 보시면 됩니다.
동접 1000명이라고 해도 정말 동일한 시점에 딱! 1000명에 입장할 일은 없을테니
그 정도로 크게 backlog를 잡지는 않습니다.
0