FastCGI и boost :: asio для модульного тестирования

0

Мне нужно создать C++ FastCGI-сервер и подключиться к нему самым простым способом, чтобы протестировать/развиваться постепенно.

У меня есть оба вопроса концептуально и с отсутствием документации API для FastCGI. Я понимаю, что когда я это делаю

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 для проверки его работоспособности.

В любом случае, я считаю, что tcp :: resolver :: query - это ключ к настройке связи из моего простого модульного теста.

Однако,

  • Я не совсем понимаю, что такое "сокет" в этом случае. Я читал, что это просто файл (на linux)?
  • Учитывая это, как я узнаю, что прослушивает сокет FastCGI?
  • Как указать сокет для boost :: asio?
  • Как остановить процесс FastCGI после прослушивания после завершения теста?

Возможно, я ошибаюсь, поэтому любые намеки на правильный подход к этому простому тестовому делу были бы с благодарностью приняты. Кроме того, если кто-нибудь знает, где, черт возьми, API-документация для fcgi/fcgi++/fastcgi ++, это было бы потрясающе.

Теги:
unit-testing
boost
fastcgi

1 ответ

2
Лучший ответ

Ваш вопрос действительно касается только элементарных сетей.

Редактировать Проверьте этот наиболее ценный интернет-ресурс по сетевому программированию (основы для продвинутых):

Сокет - это соединение. Сервер прослушивает /port/(TCP или UDP. Предполагая TCP для остальных, поскольку вы выполняете CGI).

Клиенты подключаются к порту, и сервер accept соединение, что приводит к сокету (двунаправленный поток, так сказать). Клиент теперь (обычно) send и сервер receive запрос. Затем сервер send ответ. (Соединение может быть закрыто или сохранено в зависимости от протокола/предпочтений).

Конкретные ответы:

query("localhost", "http");

в конечном итоге будет подключаться к порту 80 на большинстве систем.

Конечно, вы также можете просто указать номер порта:

query("localhost", "8080");

Выберите номер порта, на который сервер связывает его слушателем.

  • 0
    Ах, это немного яснее. Проблема, с которой я сталкиваюсь, заключается в том, что я понятия не имею, к какому порту подключен сервер FastCGI, если таковой имеется. А если нет, то как его связать (программно, а не с помощью spawn-fcgi)?
  • 0
    Чтобы «запустить» ваш CGI, вам нужен (быстрый) сервер с поддержкой CGI , здесь есть список таких серверов fastcgi.com/drupal/node/3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню