Оперативная встраиваемая http библиотека сервера требуется

Посмотрев на несколько доступных http библиотек сервера, я еще не нашел то, что я ищу и уверен, что не могу быть первым, чтобы иметь этот набор требований.

Мне нужна библиотека, которая представляет API, который является 'конвейерным'. Конвейерная обработка используется для описания функции HTTP, куда несколько Запросов HTTP могут быть отправлены через ссылку TCP за один раз, не ожидая ответа. Я хочу подобную функцию на библиотеке API, где мое приложение может принять всех тех, запрашивают, не имея необходимость отправлять ответ (я отвечу, но захочу способность обработать несколько запросов за один раз для сокращения влияния внутренней задержки).

Таким образом, библиотека веб-сервера должна будет поддерживать следующий поток

1) Клиент HTTP передает запрос HTTP 1

2) Клиент HTTP передает запрос HTTP 2...

3) Библиотека Веб-сервера получает запрос 1 и передает его Моему Приложению для веб-сервера

4) Мое Приложение для веб-сервера получает запрос 1 и отправляет его Моей Системе

5) Веб-сервер получает запрос 2 и передает его Моему Приложению для веб-сервера

6) Мое Приложение для веб-сервера получает запрос 2 и отправляет его Моей Системе

7) Мое Приложение для веб-сервера получает ответ для запроса 1 от Моей Системы и передает его веб-серверу

8) Веб-сервер передает ответ HTTP 1 Клиенту HTTP

9) Мое Приложение для веб-сервера получает ответ для запроса 2 от Моей Системы и передает его веб-серверу

10) Веб-сервер передает ответ HTTP 2 Клиенту HTTP

Надо надеяться, это иллюстрирует мое требование. Существует два ключевых пункта для распознавания. Ответы на Библиотеку веб-сервера являются асинхронными и может быть несколько Запросов HTTP, переданных Моему Приложению для веб-сервера с выдающимися ответами.

Дополнительные требования

  1. Встраиваемый в существующее приложение 'C'
  2. Маленькое место; мне не нужна вся функциональность, доступная в Apache и т.д.
  3. Эффективный; должен будет поддерживать тысячи запросов в секунду
  4. Позволяет асинхронные ответы на запросы; их маленькая задержка к ответам, и, учитывая необходимую пропускную способность запроса синхронная архитектура не собирается работать на меня.
  5. Поддерживайте персистентные соединения TCP
  6. Использование поддержки с соединениями Кометы Нажатия Сервера
  7. Открытый исходный код / GPL
  8. поддержка HTTPS
  9. Портативный через Linux, окна; предпочтительно больше.

Я буду очень благодарен за любую рекомендацию

С уважением

5
задан Howard May 12 February 2010 в 13:44
поделиться

6 ответов

Вы можете попробовать libmicrohttp .

4
ответ дан 18 December 2019 в 14:45
поделиться

В продолжение предыдущих комментариев и обновлений...

Вы не говорите, сколько одновременных соединений у вас будет, а просто "TCP-связь".
Если это одно соединение, то вы будете использовать конвейерную обработку HTTP, как уже говорилось ранее; поэтому вам понадобится всего несколько потоков, а не тысячи, для обработки запросов в начале конвейера.

Таким образом, вам не нужно будет иметь поток для каждого запроса; просто небольшой пул рабочих для каждого соединения.

Проводили ли вы до сих пор какое-либо тестирование или реализацию, чтобы показать, действительно ли у вас есть проблемы с задержкой ответа для конвейерных соединений?
Если ваше встроенное устройство достаточно мощное, чтобы справляться с тысячами запросов в секунду, включая настройку TLS, шифрование и дешифрование, я бы обеспокоился преждевременной оптимизацией на этом уровне.

0
ответ дан 18 December 2019 в 14:45
поделиться

То, что вам нужно, - это то, что поддерживает конвейерную обработку HTTP . Вам следует ознакомиться с этой страницей, если вы еще этого не сделали.

Да, используйте libmicrohttp . Он поддерживает SSL и т.д. и работает как в Unix, так и в Windows.

Однако Кристофер прав в своем комментарии. Если у вас есть время запуска для каждого ответа, вы не выиграете от конвейерной обработки. Однако, если у вас есть значительное время ответа только на первый запрос, вы можете что-то выиграть.

С другой стороны, если в каждом ответе указано время запуска, вы можете много выиграть, не используя конвейерную обработку, а создав новый запрос для каждого объекта. Тогда каждый запрос может иметь свой собственный поток, параллельно поглощая затраты на запуск. В оптимальном случае все ответы будут отправлены «сразу». libmicrohttp поддерживает этот режим работы в своей модели потока MHD_USE_THREAD_PER_CONNECTION .

1
ответ дан 18 December 2019 в 14:45
поделиться

Не могу поверить, что никто не упомянул nginx . Я прочитал большие части исходного кода, и он чрезвычайно модульный. Вероятно, вы могли бы довольно быстро заставить нужные детали работать.

0
ответ дан 18 December 2019 в 14:45
поделиться

Howard,

Вы посмотрели на lighthttpd? Он отвечает всем вашим требованиям, за исключением того, что он не является встраиваемым веб-сервером. Но он с открытым исходным кодом, и его компиляция в ваше приложение не должна быть слишком сложной. Затем вы можете написать собственный плагин для обработки ваших запросов.

0
ответ дан 18 December 2019 в 14:45
поделиться

uIP или lwip могут подойти вам. Я лично использую uIP. Это хорошо для небольшого количества клиентов и одновременных подключений (или, как вы это называете, «конвейерной обработки»). Однако, судя по тому, что я читал, он не так масштабируем и не так быстро обслуживает контент, как lwip. Я выбрал простоту и небольшой размер uIP вместо мощи lwip, поскольку в моем приложении обычно только 1 пользователь.

Я обнаружил, что uIP довольно ограничен по мере увеличения количества одновременных подключений. Однако я уверен, что это ограничение количества доступных буферов приема MAC, а не самого uIP. Я думаю, что lwip каким-то образом использует значительно больше памяти, чтобы обойти это. У меня просто недостаточно оперативной памяти Ethernet для поддержки тонны входящих пакетов запросов. Тем не менее, я могу выполнять фоновый опрос AJAX с задержкой около 15 мс на процессоре 56 МГц.

http://www.sics.se/~adam/software.html

Я фактически модифицировал uIP несколькими способами. Добавление DHCP-сервера и поддержка составного POST для загрузки файлов - важные вещи. Дайте мне знать, если у вас возникнут какие-либо вопросы.

0
ответ дан 18 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: