programing

C/C++의 고성능 애플리케이션 웹 서버

starjava 2023. 7. 11. 21:24
반응형

C/C++의 고성능 애플리케이션 웹 서버

C 또는 C++에 고성능(이상적인 이벤트 및 오픈 소스) 웹 서버가 있습니까?

작성된 HTTP Request 클래스/struct로 내 애플리케이션의 메서드/함수를 호출하고, 작성된 HTTP Response 클래스/struct를 반환한다는 점에서 사용할 수 있으면 좋겠습니다.

오픈 소스가 아니라면 장시간 폴링 연결, 킵얼라이브 등에 대한 기본적인 지원이 필요합니다. 그렇지 않으면 직접 추가할 수 있습니다.

사용 가능한 서버가 없다면 작업에 적합한 나만의 웹 서버를 작성하는 것을 추천하시겠습니까?파일 기반이 될 수 없으며 고성능 C/C++로 작성되어야 합니다.


편집: 저는 Ruby Mongrel for C와 같은 것을 생각하고 있습니다. 도움이 된다면요.

저는 제 직업에 대한 요구 사항이 매우 똑같았기 때문에 몽구스, libmicrohttpd, libevent와 같은 많은 해결책을 평가했습니다.그리고 저는 nginx 모듈을 작성하는 것에 대해서도 생각하고 있었습니다.다음은 제 연구 결과의 요약입니다.

nginx

nginx 프로젝트 페이지

저는 이 서버를 사랑하고 많이 사용합니다.지금도 사용하고 있지만 nginx로 마이그레이션할 예정인 Apache보다 성능과 리소스 사용량이 훨씬 좋습니다.

  • 튜닝 가능한 성능이 매우 좋습니다.풍부한 기능.휴대성.
  • 모듈 API는 문서화되어 있지 않으며 매우 장황한 것으로 보입니다.예를 들어nginx hello 월드 모듈을 참조하십시오.
  • Nginx는 스레드를 사용하지 않고 여러 프로세스를 사용합니다.이로 인해 모듈 쓰기가 어려워지고 공유 메모리를 위한 nginx API를 배워야 하는 등의 문제가 발생합니다.

몽구스

mongoose 프로젝트 페이지

  • 모든 서버의 코드는 단일 mongoose.c 파일(약 130K)에 있으며, 종속성은 없습니다.좋아요.
  • 연결당 스레드가 하나이므로 동시성이 필요한 경우 많은 스레드를 구성해야 합니다.높은 RAM 사용량별로 좋지않아요.
  • 성능은 좋지만 예외적인 것은 않습니다.
  • API는 간단하지만 모든 응답 HTTP 헤더를 직접 작성해야 합니다. 즉, HTTP 프로토콜을 자세히 학습해야 합니다.

libmicrohttpd

libmicrohttpd 프로젝트 페이지

  • 공식 GNU 프로젝트.
  • 자세한 API는 nginx 모듈을 작성하는 것보다 훨씬 더 간단하지만 제가 보기에는 어색합니다.
  • 킵얼라이브 모드에서 우수한 성능(아래 벤치마크 링크), 킵얼라이브 없이는 그다지 좋지 않습니다.

자유 행사

liveevent 프로젝트 페이지

Livevent 라이브러리에는 evhttp라는 웹 서버가 내장되어 있습니다.

  • 이벤트 기반이며, 라이브 이벤트를 사용합니다.
  • 간편한 API.HTTP 헤더를 자동으로 구성합니다.
  • 공식적으로 싱글 스레드입니다.이것이 큰 단점입니다.저는 여러 개의 evhttp 인스턴스를 동시에 실행하여 동일한 소켓에서 연결을 허용하는 해킹을 찾았습니다.모든 것이 안전하고 견고한지 확실하지 않습니다.
  • 싱글스레드 evhttp의 성능은 놀라울 정도로 떨어집니다.멀티 스레드 해킹이 더 잘 작동하지만 여전히 좋지 않습니다.

지완

G-WAN 프로젝트는 오픈 소스는 아니지만, 저는 그것에 대해 몇 마디 하고 싶습니다.

  • 매우 우수한 성능, 낮은 메모리 사용량, 150KB 실행 파일.
  • 매우 편리한 '서블릿' 배포: .c 파일을 csp 디렉토리에 복사하기만 하면 실행 중인 서버가 자동으로 컴파일됩니다.코드 수정 사항도 즉시 컴파일됩니다.
  • 단순 API.어떤 면에서는 제약을 받지만,풍부한 기능(json, 키 값 저장소 등).
  • 불안정한.정적 파일에 결함이 있었습니다.일부 샘플 스크립트에 매달려 있습니다. (새로 설치할 때 경험이 있습니다.)다른 버전의 파일을 혼합하지 않음).
  • 32비트 이진 파일만 (더 이상 아님).

보시다시피, 어떤 기존의 대안도 저를 완전히 만족시키지 못했습니다.그래서 저는 저만의 서버를 개발했습니다. 그것은...

NXWEB

NXWEB 프로젝트 페이지

주요 기능:

  • 매우 우수한 성능. 프로젝트 페이지의 벤치마크 참조
  • 수만 개의 동시 요청을 처리할 수 있습니다.
  • 작은 메모리 설치 공간
  • 확장할 수 있도록 설계된 멀티 스레드 모델
  • 예외적으로 가벼운 코드 베이스
  • 단순 API
  • 적절한 HTTP 프로토콜 처리
  • 킵얼라이브 연결
  • SSL 지원(GNUTLS를 통해)
  • HTTP 프록시(킵얼라이브 연결 풀링 포함)
  • 비차단 송신 파일 지원(구성 가능한 작은 파일 메모리 캐시, gzip 사전 인코딩 파일 서빙 포함)
  • 개발자를 위한 모듈식 설계
  • 데몬으로 실행할 수 있으며 오류가 발생하면 자동으로 다시 실행됩니다.
  • 오픈 소스

제한 사항:

  • libev 라이브러리에 따라 다름 (더 이상 아님)
  • Linux에서만 테스트됨

많은 고성능 웹 서버(비록 폐쇄 소스 서버)에서 사용할 수 있는 FastCGI 실행 파일을 작성하는 것이 좋습니다.

mongoose: 하나의 파일. 간단하고 사용하기 쉽습니다.비동기식은 아니지만 임베디드 및 특정 용도에 완벽합니다.

관. 훌륭합니다.충돌 없음.매우 잘 계획된 구성입니다.c/c++ 개발에 매우 스마트하고 쉬운, 다시 말해 nginx에 비해 매우 깨끗한 센스 있는 api.는 코어당 스레드를 제공합니다.당신이 지정한 것이 무엇이든 간에, 훌륭한 선택입니다.가장 큰 단점(이 영역에는 부족할 수 있음): 코드를 단계적으로 진행할 수 없습니다.

libevent: 단일 스레드는 단일 코어 시스템에서 단점이 아닙니다. 모든 포인트는 비동기/o입니다. 는 다른 코어에 대한 다중 스레드를 가집니다.

nginx: 개인적인 경험이 없습니다. 서버에서 중요한 입지를 다지고 있습니다.(계속해서 혼란스러운 api)

boost asio: asynchio(asio)를 위한 c++ 라이브러리.아주 좋아요.저 같은 단순한 사람들을 위한 친절하고 높은 수준의 API가 필요합니다.그리고 php, java, javascript, node.js 및 기타 웹 언어에서 온 다른 사람들.

python bottle: python 웹 앱을 쉽게 만들 수 있는 멋진 1 파일 lib (sys/system).libevent 및 node.js와 같은 httpd 서버가 내장되어 있거나 내장되어 있습니다.

node.js: javascript asyncio 서버. 훌륭한 선택입니다.안타깝게도, 지루해지는 자바스크립트로 프로그래밍해야 합니다.일을 완수하기 위해 할 말이 있는 반면, 그 과정에서 즐기는 것에 대해서도 할 말이 있습니다.아무도 노드를 생각해내지 않기를 바랍니다.php

저는 Axel Gneiting과 동일한 것을 제안할 것입니다. 하지만 이 접근법을 채택한 이유에 대한 답을 제시했습니다.

HTTP는 프로토콜로서 사소한 것이 아닙니다. 자체 서버를 작성하거나 기성 솔루션을 수정하는 것은 매우 복잡한 작업입니다. 별도의 처리 엔진을 구현하기 위해 사용 가능한 API를 사용하는 것보다 훨씬 더 복잡합니다.

(수정되지 않은) 메인스트림 웹 서버를 사용하면 필요한 것보다 더 많은 기능을 제공할 수 있습니다(따라서 공간이 넓어집니다).

(수정되지 않은) 메인스트림 웹 서버를 사용하는 것은 일반적으로 홈브루 시스템보다 훨씬 광범위하게 테스트되고 문서화되었음을 의미합니다.

안전하고 안정적일 가능성이 높습니다

FastCGI를 사용하면 C++ 및 C를 포함하여 모든 종류의 언어를 사용하여 백엔드 프로세싱을 개발할 수 있습니다.이를 위해 사용할 수 있는 표준 툴킷이 있습니다.

또는 많은 웹 서버들이 진행 중인 인터프리터 엔진(예: mod_interflow, mod_interflow)을 지원합니다.하지만 독자적인 네이티브 코드를 모듈로 실행하지 않는 것이 좋습니다.

파일 기반일 수 없습니다.

어? 그게 무슨 뜻이죠?

저는 열성적인 nginx 사용자입니다. nginx는 C로 작성되어 있습니다. nginx는 당신에게 도움이 될 것 같습니다.만약 당신이 nginx에서 최고의 속도를 원한다면, 나는 nginx 모듈을 만들 것입니다.다음은 무엇이 필요한지 파악하기 위해 검토할 수 있는 타사 모듈입니다.

긴 폴링 요구 사항에 대해서는 http 푸시 모듈을 확인해 보는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/6405811/high-performance-application-webserver-in-c-c

반응형