프로젝트 소개
Keel(Kernel Event Engine, Lightweight)은 C로 작성된 휴대용 비동기 네트워킹 기반 계층입니다. 핵심 아이디어는 모델 중립적인 전송 계층입니다. 즉, 운영 체제를 가정하지 않는 소켓 계층 위에서 준비 또는 완료 실행 모델에 의해 구동되는 의미론적 스트림, 리스너 및 데이터그램 추상화를 제공합니다.
아키텍처는 세 개의 직교 축을 따라 구성됩니다.
- 이벤트 축: 준비 백엔드(epoll, kqueue, WSAPoll, poll)는 관심을 등록하고 EAGAIN에서 재시도합니다. 완료 백엔드(io_uring, IOCP)는 소유한 작업을 제출하고 완료를 수집합니다. 둘 다 하나의 작은 이벤트 루프 인터페이스 뒤에 있으며, 서로를 에뮬레이션하지 않고 각자의 고유한 의미론을 유지합니다.
- 소켓 축: 플러그형 공급자 vtable(KlSocketProvider)로 POSIX 및 Winsock이 내장되어 있으며, lwIP(BSD 소켓 계층 및 원시 NO_SYS 콜백 스택) 및 독립형 UEFI EFI_TCP4/UDP4 공급자에 대한 통합이 포함됩니다. 기능 플래그는 네이티브 fd, writev 및 sendfile과 같은 기능을 제한합니다.
- 프로토콜 축: HTTP/1.1, HTTP/2, WebSocket, SSE 및 비동기 DNS 리졸버는 기반 계층의 소비자이지 목적이 아닙니다. 프로토콜 코드는 연결/스트림 및 이벤트 추상화를 통해서만 이동해야 하며, 플랫폼 네트워킹 헤더나 이벤트 엔진에 직접 접근해서는 안 됩니다. 프로젝트는 이 분리가 위반될 경우 실패하는 기본 거부 구조적 빌드 게이트를 설명합니다.
프로토콜 및 서버 기능에는 플러그형 HTTP 파서(llhttp 벤더), vtable을 통한 플러그형 TLS, 플러그형 본문 판독기, 단락 회로가 있는 경로별 미들웨어, 내장 CORS 미들웨어, RFC 2046 multipart/form-data, 세 가지 응답 모드(버퍼링된 writev, sendfile, 청크 스트리밍), 할당 없는 경로 매개변수 캡처, 자동 408 응답이 있는 연결 시간 초과, 액세스 로깅, 연결을 일시 중단 및 재개하는 비동기 서버 핸들러, 동기 및 비동기 HTTP 클라이언트, 파이프 웨이크업이 있는 스레드 풀, 일반 fd 감시자, SSE 프레이밍, 응답 압축(miniz gzip) 및 클라이언트 압축 해제, keep-alive 연결 풀, 리디렉션 팔로우, HTTP 프록시 및 CONNECT 터널링, 역압력 쓰기 버퍼, 타이머 스케줄링 및 sqlite3 스타일 오류 코드가 포함됩니다.
네트워킹 추가 기능에는 피어 자격 증명이 있는 UNIX 도메인 소켓 서버, 피어 보안 레이블, mTLS 클라이언트 인증서 검사, 신뢰할 수 있는 CIDR로 제한되는 PROXY 프로토콜 지원, 상속된 fd를 통한 소켓 활성화(systemd LISTEN_FDS), IOCP를 통한 Windows 명명된 파이프, 배치가 있는 안정적인 고정 슬롯 UDP 데이터그램 API, 멀티캐스트/브로드캐스트, ECN/TOS 마킹 및 오프로드 지원, 내장된 이중 계열 구현이 있는 플러그형 비동기 DNS 리졸버 및 Happy Eyeballs 클라이언트 연결 경합이 포함됩니다.
빌드 옵션은 epoll, kqueue, io_uring, poll 및 IOCP 백엔드, Cosmopolitan C, 네이티브 MSVC 및 최적화 플래그용 임베더 후크를 다룹니다. README는 단일 스레드에서 111K req/s 및 두 실행 모델 모두에서 ASan/UBSan 테스트를 명시하며, 벤더 종속성은 하나(llhttp)뿐입니다.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.