성능상의 이유로 웹 인프라의 일부를 다시 작성해야했습니다.요청을 프록시 할 수있는 HTTP 서버
이 목적으로 C++에서 웹 응용 프로그램으로 중요한 부분을 작성했습니다. 이 웹 응용 프로그램은 주어진 포트에서 수신 대기하고 한 번에 정확히 하나의 TCP 연결을 허용하며 현재 연결에서 수신하는 모든 HTTP 요청을 처리합니다.
당신은 포트 8080에서 수신하도록 다음과 같이 시작할 수 있습니다 : 그것은 완벽 훨씬 이전보다 빠르게 작동하지만
./webapp 8080
, 그 제한은 응용 프로그램의 한 연결에서-A-시간 본성 . 하나의 응용 프로그램 인스턴스로 둘 이상의 연결을 통해 HTML 페이지, 자바 스크립트 및 이미지를 동시에 제공 할 수 없습니다.
이 제한을 극복하기 위해 포트 80에서 수신 대기하는 프런트 엔드 역방향 프록시 HTTP 서버를 실행하고 배경에서 실행중인 웹 응용 프로그램의 여러 인스턴스에서 들어오는 HTTP 요청을 고르게 리디렉션합니다. 이 인스턴스는 다음과 같이 부팅시에 작성할 수 있습니다 :
프론트 엔드는 시작 시간 각 웹 응용 프로그램 에 영구적 HTTP 연결을 설정하도록 구성하고 앞으로 들어오는 HTTP 요청을해야
./webapp 10000
./webapp 10001
./webapp 10002
./webapp 10003
./webapp 10004
./webapp 10005
./webapp 10006
./webapp 10007
./webapp 10008
./webapp 10009
실행중인 웹 앱 중 하나인데,이를 균등하게 퍼뜨립니다. 리버스 프록시는 클라이언트에서 자체 SSL을 지원해야합니다. SPDY의 지원은 더할 나위없이 좋지만 반드시 필요한 것은 아닙니다.
제 질문은 : 어떤 HTTP 역 프록시가 내 시나리오에서 프론트 엔드로 작동 할 수 있습니까? 당신이 하나 이상의 것을 알고 있다면, 각각의 장단점은 무엇입니까?
나는 당신의 노력에 감사하지만, 모든 정직에서 난 당신이 내 질문을 읽고 생각하지 않습니다. 단일 연결 서버를 사용하려는 동기는 휠을 다시 발명하고 싶지 않았기 때문입니다. 필자는 성능에 중요한 부분을 다시 작성하고 연결 풀링 등을 기존의 웹 서버보다 성숙한 상태로 유지하려고했습니다. 모든 TCP 연결마다 새 프로세스를 생성하고 싶지 않습니다. 그래서 부팅 할 때 * 프로세스를 생성하고 프론트 엔드를 구성하여 시작시 각 웹 응용 프로그램에 영구적 인 HTTP 연결을 설정해야한다고 말한 것입니다. – JohnCand
본질적으로, 좋은 http://en.wikipedia.org/wiki/Reverse_proxy를 찾고 있습니다 (오른쪽 및 예제 이미지 참조). – JohnCand
질문을 수정하여 더 명확하게했습니다. 나는 그것이 도움이되기를 바랍니다. – JohnCand