반응형
반응형
소켓 재활용은 이미 연결이 끊어진 소켓을 재사용하는 기술입니다. 소켓을 재활용하면 새로운 소켓을 생성하지 않고 기존 소켓을 활용하여 새로운 연결을 맺을 수 있습니다. 즉 소켓 생성 및 소켓 핸들 관리에 필요한 시스템 리소스를 절약할 수 있습니다. 소켓을 재활용하기 위해서는 소켓 연결이 끊어진 상태여야 합니다. 서버 관점에서 클라이언트의 접속을 비동기로 처리하는 과정은 다음과 같습니다. 리슨 소켓 생성 및 리슨 포트 바인드 소켓 미리 생성 후 대기 소켓 풀에 등록 클라이언트 접속 종료 시 사용한 소켓 재사용처리 후 대기 소켓 풀에 등록 예제 코드는 IOCP 기반입니다. 이해가 되지 않으면 다음의 IOCP 프로토타입 포스팅을 참고하세요. 2023.12.13 - [프로그래밍/C | C++] - IOCP 기반 ..
이번 포스팅에서는 IOCP 서버에서 소켓 풀을 관리하는 방법에 대해 알아보겠습니다. 이전 포스팅에서 IOCP 뼈대 코드를 작성하고 초기화하는 과정을 알아보았습니다. 2023.12.13 - [프로그래밍/C | C++] - IOCP 기반 다중 접속 및 데이터 처리-1 IOCP 기반 다중 접속 및 데이터 처리-1 윈도 환경에서 다중 클라이언트의 접속을 처리하는 네트워크 서버를 구현하기 위해서는 IOCP 사용이 필수라고 생각합니다. 에코 서버를 IOCP 기반으로 구현한 예제는 많지만 실제 현업에서 다중 blog.noyecube.com 2023.12.14 - [프로그래밍/C | C++] - IOCP 기반 다중 접속 및 데이터 처리-2 1. 리슨소켓 Accept 이벤트 감지 WSAEVENT hWSAEvent = W..
이전 포스팅에서 IOCP 서버 스켈레톤 코드를 작성해 보았습니다. 이번 포스팅에서는 IOCP 서버를 위한 스레드풀 초기화 코드를 살펴보겠습니다. 1. IOCP 서버 실행 결과 실행결과 먼저 살펴보겠습니다. 실행환경은 8 코어 16 스레드 CPU입니다. IOCP Worker Thread 16개, IOCP RIL Thread 16개씩 생성하였고 동시실행 가능 스레드 수는 각 8개씩 설정하였습니다. 스레드는 실행중 I/O 나 기타 사유로 Pending 상태에 빠질 수 있기 때문에 동시 실행 가능한 숫자보다 많은 수의 스레드를 생성하여 스레드풀에 등록해 둡니다. 2. 초기화 코드 호출 구조 및 예제 코드 RilInit 함수에서 서버를 초기화합니다. 작업 스레드풀을 생성하고 작업 스레드들을 대기시킵니다. 송신 스..
윈도 환경에서 다중 클라이언트의 접속을 처리하는 네트워크 서버를 구현하기 위해서는 IOCP 사용이 필수라고 생각합니다. 에코 서버를 IOCP 기반으로 구현한 예제는 많지만 실제 현업에서 다중 클라이언트 접속을 처리하기 위한 아키텍처를 어떤 방식으로 접근하면 좋을지 고민해 보는 차원에서 IOCP 기반 다중 접속 처리 및 데이터 처리 프로토타입 구상을 위해 이번 포스팅을 작성합니다. 1. 리눅스 epoll 대비 IOCP(I/O Completion Port) 장점 대부분의 유명한 게임서버는 Windows Server 기반이라는 사실을 알고 계신가요? 그 이유는 리눅스에서 다중 접속을 처리하기 위해 사용가능한 epoll 보다 Windows의 IOCP가 더 나은 장점이 있기 때문입니다. 윈도 표준 API로 윈도 ..
이번 포스팅에서는 서버에 다수의 클라이언트가 접속했을 때의 패킷 처리 고려사항에 대해 알아보겠습니다. 다중 클라이언트 패킷 처리는 어떻게 해야 하나? Multiplexing으로 검색하면 TCP/IP Transport Layer의 내용이 나오거나 다중 클라이언트 접속처리 예제 코드만 나오고. 응용프로그램 레벨에서의 다중 클라이언트 패킷 처리 관련 내용을 못 찾겠네요. 그래서 직접 설계해 보려고 합니다. 서버와 클라이언트 관계가 1:1이면 앞선 글의 제목처럼 bridged 그 자체이므로 multiplexing에 대해 별다른 고려가 필요 없이 서버는 마치 내가 클라이언트인 것처럼 패킷을 주고받으면 그만입니다. 그런데 위 그림처럼 다수의 클라이언트가 접속하게 되면 추가적인 고려사항은 무엇있까요? 일상 속의 휴대..