저의 목표는 가능한한 많은 연결을 유지할 수 있는 게임 서버를 만드는 것입니다.
많은 수의 동접자를 처리할 수 있도록 하고 싶기 때문입니다.
현재 저는 여러가지 방법을 사용하여 채팅 서버를 만들어봤습니다.
제가 시도해본 방법들은 다음과 같습니다.
(편의상 소켓이라고 표현하였지만 정확히는 TcpClient 클래스를 사용하였습니다)
1. 연결된 소켓별로 NetworkStream.Read()를 수행하는 쓰레드 생성해서 클라이언트를 관리하는 채팅 서버.
2. 연결된 소켓별로 NetworkStream.ReadAsync()를 수행하는 Task를 생성해서 클라이언트를 관리하는 채팅 서버.
(Read 및 ReadAsync는 While 루프 내부에서 수행됩니다)
사실 저는 이 방식이 직관적으로 느껴지고, 사용하는 데에도 아무런 문제가 없습니다.
하지만 이 방식이 '가능한한 많은 동접자 수를 처리할 수 있는 방식인가?'하는 의문이 듭니다.
더 나은 방법이 있을까요?
또 관련 정보를 찾기 위해 구글링을 하던 도중
"...예전처럼 소켓마다 쓰레드 생성해서 관리하던 시절에..."
위 문구가 들어간 글을 발견했습니다.
소켓마다 쓰레드 생성해서 관리하는 방식이 예전 방식이라면,
지금은 어떤 방식으로 Accept된 소켓들을 관리하나요?
구글링을 해봐도 관련 정보를 찾을 수 없어 이렇게 질문을 올립니다.
정말 알고싶습니다. 답변 부탁드립니다!
(추측성 답글 대신 경험자 분의 답변을 기다립니다!)
질문 정리
1. 가능한한 많은 동접자를 처리할 수 있는 소켓 관리 방법?
2. 소켓 별로 쓰레드를 생성하는 방식을 사용해서 서버를 만들어도 괜찮은지?
3. 만약 소켓 별로 쓰레드를 생성하는 방식이 최선의 해결책이 아니라면, 더 나은 대안은 무엇인지?