전체 글 2

kqueue in Unix AsynchronousSocketChannel

비동기 소켓 I/O에서 사용되는 AsynchrounousServerSocketChannelI는 어떤 매커니즘으로 I/O를 비동기적으로 처리하는 것일까? 세운 가설내부에 I/O와 콜백을 처리하는 스레드 풀이 존재한다.유저가 비동기 함수를 호출했을 때 대신 요청하여 블로킹되고 즉시 반환된다.요청이 완료되면 비동기 콜백을 호출한다.실제로는 가설과 거의 비슷하였지만 다른 부분이 내부적으로 kqueue와 논블로킹 I/O를 통해서 요청을 처리하는 것이었다. kqueueI/O 멀티플렉싱 (이벤트 기반 비동기 I/O) 방법 중 하나로, BSD 계열에서 사용되는 방식이다.맥OS는 BSD 기반이기 때문에 BSD에 설치된 JDK가 kqueue를 사용하는 것인 듯 싶다. 아마 운영체제 별 설치된 JDK마다 구현 내부는 달라질..

카테고리 없음 2024.11.07

확장성 있는 웹소켓 서버 구현 이야기

대용량 연결 처리가 가능한 웹소켓 서버를 구현하는 것이 목표였다. 웹소켓 연결에 대해서 얼마까지 처리가 가능한지 확인해보았다.go 로 간단하게 클라이언트 코드를 짜고 로컬(macos)에서 연결을 테스트해보니, 120개 정도가 넘어가니 Connection reset by peer 에러가 발생했다. Whireshark를 통해 확인해보니 연결이 established 되고 나서 HTTP GET 요청을 보낼 때 서버측에서 즉시 RST 플래그를 보내 연결을 종료시켰다. 1. ulimit -n 으로 FD 할당에 제한이 있는지 확인해보았다:- 1048576 (ulimited)- 제한은 없었다. 2. 검색을 통해서 syn 큐 혹은 accept 큐 오버플로우일 수 있겠다고 생각이 들었다.- netstat -s | gre..

카테고리 없음 2024.10.18