점진적으로 테스트/개발하기 위해 가능한 한 가장 간단한 방법으로 C++ FastCGI 서버를 만들고 연결해야합니다.단위 테스트를위한 FastCGI 및 boost :: asio
개념적으로나 FastCGI에 대한 API 설명서가 부족한 문제가 있습니다. 내 이해는 내가 할 때이다.
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
while (FCGX_Accept_r(&request) == 0) {
}
이것은 소켓을 열고 요청을 기다린다. 그런 다음 boost :: asio를 사용하여 다음과 같이하고 싶습니다.
boost::asio::io_service io_service;
boost::system::error_code error;
using boost::asio::ip::tcp;
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "" /* WTF are the params here? */);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::socket socket(io_service);
boost::asio::connect(socket, endpoint_iterator);
while (true)
{
boost::array<char, 128> buf;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
if (error)
break;
}
CPPUNIT_ASSERT_EQUAL(error, (boost::system::error_code)boost::asio::error::eof);
FastCGI 프로세스가 작동하는지 테스트하기 위해 프로그래밍 방식으로 요청을 FastCGI 프로세스에 보냅니다.
어쨌든 tcp :: resolver :: query가 간단한 단위 테스트에서 통신을 설정하는 열쇠라고 생각합니다.
그러나
,- 나는 완전히 '소켓'이 경우에 이해하지 않습니다. 나는 그것이 단지 파일 (리눅스에서)이라는 것을 읽었는가?
- 이 점을 감안할 때, 어떤 소켓 FastCGI가 수신 대기하는지 어떻게 알 수 있습니까?
- 어떻게 boost :: asio에 소켓을 지정합니까?
- 테스트가 완료되면 어떻게 FastCGI 프로세스가 수신을 중지합니까?
나는이 모든 잘못에 대해 갈 것이므로,이 간단한 테스트 케이스에 접근하는 적절한 방법에 대한 힌트가 감사히 받아 들여질 것입니다. 또한 누군가가 fcgi/fcgi ++/fastcgi ++에 대한 API 문서가 어디 있는지 알고 있다면 그것은 대단 할 것입니다.
아, 그건 좀 더 분명합니다. 내가 직면 한 문제는 FastCGI 서버가 어떤 포트에 바인딩되어 있는지 알 수 없다는 것입니다. 그리고 그렇지 않다면 어떻게 바인딩 할까? (spawn-fcgi를 사용하는 대신 프로그래밍 방식으로)? – Dave
CGI [빠른 CGI 지원 서버 필요] (http://www.fastcgi.com/devkit/doc/fcgi-devel-kit.htm#S4)를 실행하려면 해당 서버 목록이 있어야합니다. 여기 http://www.fastcgi.com/drupal/node/3 – sehe