Написание собственного HTTP-сервера

Я планирую написать HTTP-сервер:

Будет два модуля (L и P), оба исполняемые.

Один из этих исполняемых файлов (L) будет прослушивать HTTP-запрос и просто перенаправлять его другому исполняемому файлу (P), который имеет всю логику синтаксического анализа HTTP и выполнять дальнейшие действия. Может быть некоторое количество 'Ps', информация/параметры соединения которых будут известны слушателю L.

Идея заключается в том, что в случае сбоя одного из Ps можно использовать другой и т. д. Кроме того, один P можно запустить для взаимодействия с одной копией БД, а другой Ps с другой репликой.

Теперь я в замешательстве, выберу ли я комбинацию L&P или только L, которая будет прослушивать, получать, анализировать запрос и отвечать.

In case I go for L&P combo there will be some overhead because of request forwarded from L to P and then response from P to L.

  • Можно ли пренебречь этими накладными расходами для 100 000 обращений в секунду?

person Mayank    schedule 27.06.2011    source источник
comment
Что угодно может обрабатывать 100 000 обращений в секунду, если вы используете достаточно оборудования.   -  person Marc B    schedule 27.06.2011
comment
Эм, причем тут вопрос? потому что я нигде не вижу вопросительного знака.   -  person T. Webster    schedule 30.06.2011


Ответы (1)


Прежде всего, что не так со всеми существующими веб-серверами? Почему бы не создать модуль для одного из них?

Если вы хотите пойти дальше и создать свой собственный (и это нетривиальная задача, если вы хотите полностью поддерживать стандарт HTTP): Создайте HTTP-сервер и модули (.so/.dll). Просто оберните все вызовы модулей с помощью try/catch, чтобы предотвратить сбой вашего сервера.

Другой способ сделать это - создать библиотеку парсера http и позволить всем P быть полными веб-серверами и поставить перед ними прокси/балансировщик нагрузки. Таким образом, вы можете переместить любой из Ps на новые серверы, если у вас закончилась вычислительная мощность.

person jgauffin    schedule 27.06.2011
comment
Я говорю о втором подходе ваших предложений. L будет вести себя как балансировщик нагрузки. От P будет логика парсинга, я имел в виду, что библиотека парсера http будет загружена P. Более того, я не планирую поддерживать полный стандарт HTTP. В основном, GET, POST и multipart/form-data - person Mayank; 27.06.2011