cpp-netlib в вечной альфе же, а POCO - помойка жаваобразная, умеет все на свете, но все кое-как. Т.е. если все приложение на POCO/macchina - то ок конечно, а только ради HTTP сервера я с POCO не стал бы связываться.
Ноуп, не подходит, на С можно взять civetweb или libevent. А на крестах делать что-то с сетью и не использовать ASIO (с Boost или без - c C++11-only) - это зашквар.
Ну так вопрос какую HTTP библиотеку с ним использовать, руками на ASIO только HTTP 1.0 можно сделать, HTTP 1.1 (а под HTTP именно он понимается) - не получится за неделю-две наваять. HTTPS опять же.
У авторов мангуста Столман головного мозга случился же, не все в редхате работают чтобы весь код иметь под GPL.
Авторы мангуста по сути просто решили сделать свою библиотеку платной. Это нормально, и они имеют на это право. Ну а GPL оставили, чтоб фанатики опенсорса не заклевали, плюс можно патчи принимать, что тоже хорошо.
Переводя на русский - mongoose теперь называется civetweb, а его жадный автор может продавать что захочет.
И ASIO портабельный же и на многих платформах объезженный . Ну если я например захочу https://github.com/splunk/pion подебажить, то внутри будут общепринятые shared_ptr и socket.async_write. А внутри мангуста будут кишки платформенного сетевого стека, причем без смарт-поинтеров RAII. Я не хочу такое дебажить.
Ога, большой и сложный протокол, сравни с FTP например. И проблема в том, что то что ты вывешиваешь по HTTP должно работать из cURL'a/браузера, иначе не кошерно. клиенты не будут под твою ковбойскую реализацию подстраиваться.
h323, sip, rtsp, rtp, skype, - так вот http среди них, самый банальный, и написать http сервер кторый отдает какие то html файлы, или стримит контент, и это будет понимать curl или wget и остальные клиенты - это самая банальная задача. либо на лоре тусуются одни школьники, либо меня тролят. надеюсь последнее
написать http сервер кторый отдает какие то html файлы, или стримит контент ... это самая банальная задача
Игорь Сысоев, залогиньтесь, мы никому не скажем что но самом деле HTTP-server это банальная задача, а вы nginx написали за неделю и уже 13 лет тупо пилите бабло инвесторов.
Алсо вопрос с задней парты: уважаемый гасконец, а отчего ваш HTTP-сервер но мои запрос вида:
Я думаю, что упаковка всего приложения в виде модуля nginx - будет наилучшим решением с точки зрения HTTP. Сделать производительность выше чем так, скорее всего вообще невозможно. Только вот с точки зрения C++ и бизнес-приложения на нем написанного это вряд ли будет удобным. Цель обычно - пару сервисов (не всегда первостепенных, мониторинг какой-нибудь или интеграция) вывесить наружу. А не менять для этого все приложение. Ну и API у nginx, как и любое high-performance API, - весьма черезжопное.
Сделать производительность выше чем так, скорее всего вообще невозможно.
А стоит за производительностью гнаться? Простенький вебсервер поверх boost.asio даёт на коротких запросах где-то 24 kRPS, тогда как nginx выжимает 25-27 kRPS.
У меня был однопоточный сервер, так что в нём нет явных блокировок. Указанной скорости он достигал, только если клиент использует keep-alive. Если закрывать соединения, получается где-то 3 kRPS.
Здесь видимо вы что-то свое понимаете под словом «простенький».
Принимает соединение, парсит заголовок, из которого достаёт только URL и Content-Length, читает тело, вызывает обработчик тела, отсылает ответ.
Прохладная история, я когда-то писал свою библиотеку на C++ для http, достал ее их архива, взял свой же пример, специально отключил keep-alive и получил:
~$ ab -n 10000 -c 100 "http://127.0.0.1:8080/"
This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /
Document Length: 26406 bytes
Concurrency Level: 100
Time taken for tests: 0.470 seconds
Complete requests: 10000
Failed requests: 0
Total transferred: 264660000 bytes
HTML transferred: 264060000 bytes
Requests per second: 21268.36 [#/sec] (mean)
Time per request: 4.702 [ms] (mean)
Time per request: 0.047 [ms] (mean, across all concurrent requests)
Transfer rate: 549695.72 [Kbytes/sec] received
Пример в собранном виде занимает 60Кб без дополнительных зависимостей. Исходного кода 140 Кб, но там и ручная реализация deflate, и логи, и кэш и пр. Так что не надо пугать людей, сделать простой http сервер под специфичную задачу не так сложно и долго. Понятно, что он будет гораздо примитивнее nginx и пр., но свою задачу решать он будет.
Сам написал, на Ragel. В колбеке, который вызывается по окончании значения поля, просто проверяется, является ли имя поля content-length или connection. Остальные заголовки для задачи не были нужны.
Кстати, раз уж mangoose по сути «кончился», то если будет время - как-нибудь оформлю эту библиотеку и выложу на github. Там как раз С++11, а точнее C++0x, то, что умели vs2010/gcc на то время.