Как стать автором
Обновить

Алгоритмы быстрой обработки HTTP-строк

Время на прочтение22 мин
Количество просмотров9.2K
Всего голосов 39: ↑38 и ↓1+37
Комментарии2

Комментарии 2

Классно.
Глядя на HTTP парсер nginx я задавался вопросом: неужели этот код написан человеком? Куча состояний, условий переходов.
Наверняка использовался какой-то инструмент для генерации конечных автоматов или весь ваш код написан руками?

Только увидел коментарий. Весь парсер у нас писался руками. Мы используем на макросах С некоторое подобие DSL, чтобы писать было проще. Есть HTTP парсеры, сгенерированные Ragel, но, во-первых, насколько помню, не вся грамматика HTTP может быть выражена таким генератором парсеров. Во-вторых, мы старались изолировать парсер от остального кода (аллокаторов памяти, сетевых структур и HTTP логики), но на практике это получается плохо.

Иными словами, если мы посмотрим не только на сервера, которые могут обрабатывать трафик из Internet типа Nginx, H2O, Varnish, HAproxy, но и "легкие" реализации, в основном предназначенные для микросервисных коммуникаций типа boost::beast, Pistache, libhttpserver или uWebSockets - у всех будут руками написанные парсеры.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий