LINUX.ORG.RU

Встраиваемый HTTP-сервер на C

 , ,


0

4

Поделитесь, чем пользуетесь, если нужно встроить HTTP-сервер в проект на чистом C. Почему выбрали именно одно решение, а не другое?

Сам пользуюсь libmicrohttpd (хотя API у него, ИМХО, не фонтан), но посматриваю в сторону mongoose.

Ответ на: комментарий от post-factum

Оверхед/производительность?

Производительность - ураган. На узкоспецифичных задачах быстрее нгинкса http://www.reddit.com/r/golang/comments/28so0e/go_networking_performance_vs_n... Конечно, если потюнить nginx до состояния этого примера он тоже будет нереально быстр. Единственное но, go собирается в монолитный бинарь в несколько метров, но зато кросскомпилируемый (см. список платформ). JSON маршаллинг из коробки. Манипуляция с имиджами на уровне имиджмэджика из коробки. Если не делать колдунств с каналами - выстрелить в ногу почти невозможно. Синтаксис - примитивный, парадигма - императивная. Вообщем не сказать, что решение бриллиант, но:

- писать меньше - мелкие вещи вроде json-строку в структуру и обратно из коробки. - юникод из коробки - производительность на уровне, во всяком случае вылизать ситное решение до такого уровня скорости/надежности - можно, но времени займет больше. Аналог фэйсбуковского прокси на Go смотри в фэйсбучной-же репе (facebookgo кажется) на гитхабе.

На самый худой конец, решение на Go - сэкономит тебе время, которое можно потратить на чтение книжки Стивенса UNIX network programming - и впоследствии действительно налабать весьма серьезное решение.

ioway
()
Ответ на: комментарий от Reinar

Это нормальный эмбрион http сервера. Во всяком случае подход описан - яснее некуда.

ioway
()
Ответ на: комментарий от stevejobs

Хочется зарабатывать на продаже софта, тогда его нужно самостоятельно разрабатывать.

А так сорсефорж да гитхаб и так трещат по швам от тонн кода на BSD/MIT/etc.

Dron ★★★★★
()
Ответ на: комментарий от stevejobs

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

Можно, если на стороне сервера, там ты царь и бог и никому ничего не должен.. В исключении AGPL конечно. Или LGPL на стороне клиента, но в этом случае тоже проблем нет, так как твой код просто дёргает библиотеку. Пускай она открытая это никак не повредит бизнесу.

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)
Ответ на: комментарий от Dron

Хочется зарабатывать на продаже софта, тогда его нужно самостоятельно разрабатывать.

а вот и нет.

когда ты пишешь ЛИБУ под BSD, то есть шанс, что кто-то заюзает это в своем софте. И потом за доделками обратятся именно к тебе, это дешевле чем на штатных кодеров перекладывать.

а когда ты пишешь под GPL, то ни один производитель софта с деньгами к тебе не обратится. Вообще без шансов.

простая экономика, которую понимают нефанатики

stevejobs ★★★★☆
()
Ответ на: комментарий от Dron

Можно, если на стороне сервера, там ты царь и бог и никому ничего не должен..

да это иллюзия. Например, пилят люди для своей компании.. ну.. какой-нибудь очередной хэлпдекс. Инхаус? Инхаус, хоть какое GPL юзай.

но потом наступает момент, когда сранный хэлпдеск написан, и у всех возникает мысль: теперь у нас есть ПРОДУКТ, а если есть продукт - значит его надо продавать за большое $$$!

и вот если там, в этом продукте, заюзан GPL, то нужно еще огромное количество времени затратить, чтобы его выпилить к чертям

можно и нужно прямо с самого начала об него не мараться, и всё будет хорошо

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Именно так это и работает. И шансы не просто есть - они гораздо выше чем в случае с обычными фрилансерами а-ля «у мну есть ноухау, но покажу только после оплаты». Секрет прост, если человек не может реализовать что-то - п_здить код бесполезно. Развить - не сможешь, то что есть - сломаешь. Если можешь, п_здить не надо - все равно, в тех или иных мелочах с автором не согласишься и сделаешь по-своему и результат даже с натяжкой «деривативом» не назовешь.

ioway
()
Ответ на: комментарий от stevejobs

Это уже со стороны разработчика, если есть цель коммерчески поддерживать свой софт тогда да. Но это далеко не всегда, во многих случаях пишут для фана, для себя или в научных/исследовательских целях. В этом случае GPL это возможность обезопасить себя от того что кто то возьмёт добавит киллер фичу и твой проект будет задавлен и забыт.

Хотя я говорил выше постами исключительно об бизнесменах, которые эти либы используют.

Короче каждой лицензии своё применение и если разраб выбрал ту или иную лицензию, значит на момент выбора он так решил и точка.

И вот ещё, автор может приспокойно иметь двойное лицензирование. И сообществу конфетка и бизнесу удобно.

Dron ★★★★★
()
Ответ на: комментарий от stevejobs

Ну так правильно, ты выносишь код из сервера на свет божий к клиенту будь любезен соблюдай лицензию открывай код. Или заменяй своей реализацией.

можно и нужно прямо с самого начала об него не мараться, и всё будет хорошо

Ну если есть альтернатива под BSD/MIT/WTFPL вместо GPL то конечно разумно её использовать вместо GPL конечно. Никто и не спорит. Ты уже стрелки перевёл. Изначально разговор был не об этом. Изначально разговор был о наглости и обсирания тех кто уже залицензировал софт под GPL и теперь его никак к себе не присвоить. И про слова фанатик и прочее. GPL далеко не всегда используется чтобы сохранить свободу и прочие громкие слова.

Dron ★★★★★
()
Ответ на: комментарий от Dron

и обсирания тех кто уже залицензировал софт под GPL

BSD появилась раньше GPL, так что не надо про «уже». А большинство софта появилось когда уже все современные лицензии были. Они намеренно этим GPLем обмазались

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Это их право. Не нам судить. Да и вообще мы в этом топике заофтопились по полной, хватит уже ::)

Dron ★★★★★
()

Я для себя решил примерно так:

- thttpd — http://acme.com/software/thttpd/ это сервер для, скажем так, кофеварок.

- либо boa (http://www.boa.org/) это вообще для газонокосилок.

Это сервера «общего назначения». Если мне надо обработать пару специфичных http-запросов и не более, то epoll() и собственный код в помощь.

Если вопрос стоит в использовании XML-RPC, то emerge xmlrpc-c, там есть тот же abyss.

Moisha_Liberman ★★
()

Тот, который в systemd, уже предлогали?

anonymous
()
Ответ на: комментарий от post-factum

Иногда свелосипедить это проще.

В особенности, если это действительно какая-то embedded железяка и веб-серверок там выполняет строго вспомогательные задачи. А так, в принципе, boa должно хватить. Он и cgi даже поддерживает, если надо.

Кстати, в своём постинге выше я малость напутал. Всё-таки boa это для кофеварок. Он, стрипованный занимает в районе 1400K. Для газонокосилое лучше thttpd. Он отстрипованный в районе 64K занимает. Но тоже умеет cgi, виртуальные хосты... Короче, неплохая штука если на какой-нибудь недожелезке поднимать с памятью в гулькин... «нос» и скромными задачами.

Moisha_Liberman ★★
()
Ответ на: комментарий от post-factum

Хм...

У thttpd/boa оверхед сравнительно небольшой. Но если хайлоад, то тогда надо смотреть что отдаёте и как править код. Возможно, что придётся местами переписать и вставить sendfile() для статики (если она там есть).

Или, если всё совсем хорошо с ресурсами, то почему бы не lighttpd использовать? Он хоть и однопоточный, но работает через epoll() и довольно экономичен при работе со статикой. У меня на Beagle Bone black бегает и не жужжит. Под генточкой.

Moisha_Liberman ★★
()
Ответ на: комментарий от post-factum

Я только добавлю...

Почему лайти использую. В сравнении с нджинксом он как-то не особо проигрывает. Довольно хорошо поделен на модули. И, что самое приятное, если самопальные модули ваять для какой-либо задачи, то есть и доки и примеры. Вменяемые. Т.е., от cgi/fastcgi можно перейти к расширению собственными модулями как нефиг-нафиг.

Апологетам нджинкса в данном случае я бы предложил просто заткнуться. Либо заткнуться поглядев на код нджинкса. После этого любой объём макарон уже не будет пугать.

Moisha_Liberman ★★
()
Ответ на: Хм... от Moisha_Liberman

Мне файлы читать по GlusterFS API, а отдавать по HTTP. sendfile не поможет ни разу.

post-factum ★★★★★
() автор топика
Ответ на: комментарий от post-factum

Тогда да.

sendfile() не в помощь. Единственное, что в голову приходит (если файло всё-таки статика и есть достаточно RAM), то можно извратиться, поставив упаковку статики и пакуя не в файловой системе, а создав ram-disk, но это надо экспериментировать. Там же, кстати, на ram-диске можно и кеширование сделать, по крайней мере, попробовать. Но это так, что называется мысли навскидку, мне неизвестны детали задания. Вполне возможно что и не получится.

Moisha_Liberman ★★
()

Спасибо за подсказки. Пока по результатам поиска остаюсь на libmicrohttpd, но в запасе держу mongoose.

post-factum ★★★★★
() автор топика

С упомянутой книгой Стивенса «Сетевое программирование» ядро многопоточного сервера пишется за ... 1 раб. день при полном отсутствии знаний в области сетевого программирования и потоков.

Причём, часть кода внаглую можно тупо взять из книги.

DarkAmateur ★★★★
()
Последнее исправление: DarkAmateur (всего исправлений: 1)
Ответ на: комментарий от post-factum

велосипедить http-парсер не охота.

Если имеется чёткое представление, что конкретно должен делать сервер (пара спец. http запросов), то велосипедить особо много не придётся.

DarkAmateur ★★★★
()
Ответ на: комментарий от DarkAmateur

Обычный сервер с потоком на запрос я тебе за час напишу. А тут в треде вроде нужен сервер с претензиями

vertexua ★★★★★
()
Ответ на: комментарий от DarkAmateur

Во-во. Народ даже на микроконтроллерах фигачить веб-серверы умудряется. И нормуль.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от vertexua

Действительно нехорошо. Серверы должны распространяться исключительно под AGPL!

aembers_guggenheim
()
Ответ на: комментарий от stevejobs

Чёртовы фанатики! Не дают наживаться на чужом труде, ничего не отдавая взамен! Как они посмели?!

aembers_guggenheim
()
Ответ на: комментарий от stevejobs

продукты на основе GPL в своем коде вообще никак нельзя использовать, потому что тогда твой код станет с открытыми исходниками и станет приносить 0$ вместо 1000 за коробку.

Дак не юзай, суть твоего нытья заключается в том, что ты не можешь, но условия ставишь.

Я бы понял, если бы ты мог и ныл, что ты типа так жаждешь перейти на спошный кор лишь ради поддержки «сообщества», тогда как твой кор всяко лучше, но тебе не даёт возможности лицензия.

Давай я заберу у тебя 1000 баксов говорит прохожий президенту.
Чё, нахрен мне тебе отдавать 1000 баксов? Давай лучше ты на меня будешь работать и по 1000 баксов каждый месяц приносить,
не ну посмотрите на него еще я не платил каждому встречному?
Сказал президент. И прохожий был выпнут из страны к чертям собачьим, и визу ему не дадут уже никогда.

Связно ты написать не осилил, а ответ президента дак я вообще не распарсил.

Понимаешь в чем штука, тебе никто и ничего не должен. Хочешь иметь 1к$ с продукта - напиши его сам, не можешь - жри говно, либо подстраивайся под имеющиеся условия. С чего ты решил, что кто-то тебе должен что-то предоставлять на халяву, да ещё и под твоими условиями?

Касательно твоего «президента». Тебе никто в этом мире не даст бабки на твоих условиях и я не представляю насколько надо быть больным, чтобы это не понимать. И это должно было быть основой твоего высера про «президента», но ты же выдал прохожим себя и обделался.

Ты приносишь президенту бабки? Ты можешь требовать бабки. Не приносишь - не можешь. Отмазоны, аля «Дай вначале бабки и уж я точно буду» не работают, хотя об пользе для того, за счет чего ты собрался кормится ты не говоришь, да и даже если предположить о её(пользы) наличии, то она крайне сомнительна и минимальна.

Дак всё же, кто кому должен и кто пойдёт нахер?

anonymous
()
Ответ на: комментарий от post-factum

Не впечатлил этот libmicrohttpd. Существуют аналоги гораздо более юзабельные. А тебе для встраиваемого решения? Требутся кросскомпиляция? Или x86? Можно поискать либы на гоу, сейчас на гитхабе на нём активно сетевые проекты пишут. Почему именно си? А nodejs?) Говорят, он тоже неплохо работает на всяких arm бордах.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Мне для мощного x86, но встраивать в существующий код.

post-factum ★★★★★
() автор топика
Ответ на: комментарий от anonymous

а ответ президента дак я вообще не распарсил.

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

тебе никто и ничего не должен.

У нас тут строится правильная культура написания софта.

Есть ынтерпрайзы, для которых всё и делается, и ынтерпрайзам свобода не нужна. С ынтерпрайзов доятся бабки. На эти бабки живут люди, которые пишут программы уже для свободных людей.

GPLщики в эту культуру срут. Вот как если дерёвня в говнодавах на лошади начнёт ходить по городу. Или какое-нибдь быдло, жрущее пиво на улице, и кидающее стеклотару прямо на асфальт.

Никто никому ничего не должен. Но дерёвню наблюдать стрёмно, лучше ее в город не пускать вообще. Это нужно делать совместными силами. Для этого надо чтобы максимальное количество народа понимало, что происходит.

Отмазоны, аля «Дай вначале бабки и уж я точно буду»

предложение рождает спрос. Такая вот она экономика. Сначала ты делаешь продукт, а потом МОЖЕТ БЫТЬ у тебя его покупают.

Дак всё же, кто кому должен и кто пойдёт нахер?

наверное ты

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

потому что у тебя дислексия

Ну дак что ты ещё можешь высрать.

и ты не видел что это эта история

Видел, только это не имеет отношения к делу.

пародия на ответ предыдущего анонимуса.

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

У нас тут строится правильная культура написания софта.

Дак строй её, кто тебе не даёт? Строй сам, а не пытайся кому-то что-то предъявлять и требовать.

Есть ынтерпрайзы, для которых всё и делается, и ынтерпрайзам свобода не нужна.

Ну дак пусть ынтерпрайзы сами себя и обеспечивают, причем тут сторонний гпл?

С ынтерпрайзов доятся бабки.

Эта детсадовская подмена понятий. «С коров доится молоко, значит ты должен моей корове бабки.» Я должен только той корове, молоко которой я пью, а вот твоя корова меня не интересует и мне ничего не даёт. И твои недообщения картину мира не исправят.

Так же, какое ты имеешь отношение к ынтерпрайзам и с чего ты что-то требуешь? Причем ты требуешь не за бабки, а просто так.

На эти бабки живут люди, которые пишут программы уже для свободных людей.

К чему ты это высрал? Ты понимаешь условия продажи? Ынтерпрайзы дают бабки за обеспечение на котором собственно и завязана их жизнь. Это обычная покупка.

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

С чего очередной детсадовский свич на твои фантазии?

GPLщики в эту культуру срут.

Какую такую «культуру»? И что значит «срут»?

Но дерёвню наблюдать стрёмно, лучше ее в город не пускать вообще.

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

Ты какбэ пытаешься съехать на обобщение себя с областью, аля «Область» - это я, а бабки платит область - бабки плачу я - мне должны. Но я тебе ещё раз объясню, бабки ты платишь за что-то и «не гпл» туда не входит. Это не является зависимостью - это взаимозависимость, поэтому это не аналогия твоей зависимости от гпл.

anonymous
()
Ответ на: комментарий от stevejobs

Или какое-нибдь быдло, жрущее пиво на улице, и кидающее стеклотару прямо на асфальт.

К чему ты пишешь? Ты не понимаешь, что ты такое же быдло, ибо несёшь такую же бессвязную и ни на чем не обоснованную херню, прям как алконавт на улице, который так же считает, что ему кто-то что-то должен.

Это нужно делать совместными силами. Для этого надо чтобы максимальное количество народа понимало, что происходит.

Судя по той херне, которую ты пишешь, твоё понимание в районе нуля. Весь твой выхлоп состоит из твоих влажных фантазий и тупого несвязного вранья.

Ты плюёшь в лицо тем, кто читает твои жалкие попытки оправдания. Хотя да, вы же кроме физического ничего не понимаете. Быдло ведь.

предложение рождает спрос.

Нас не интересует ни спрос ни предложение. К чем ты их сюда приплёл? У пацана есть гпл-продукт, с чего ты решил, что он должен делать его не гпл? Как на это влияет спрос/предложение?

Предложение подстраивается под спрос лишь в одном условии, когда предложение зависит ото спроса. Но в твоём случае гпл-коду похрен и подстраиваться по тебя он не обязан, ибо ты для него 0.

Сначала ты делаешь продукт, а потом МОЖЕТ БЫТЬ у тебя его покупают.

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

И ещё раз, данному продукту насрать покупаешь ли его ТЫ, либо нет. Он не зависит от твоих бабок. Твоя дефолтная примитивная паста работает только при зависимости продукта от бабок при его реализации.

Т.е. ныть ты можешь в таком ключе «я хочу башлять бабки, а пацаны - поделцы, даже за бабки не хотят мне сделать не гпл - пошли они нахрен». Только даже в этом случае идёшь нахрен ты и требовать ничего не можешь, ибо ты зависимое, а они зависимость.

Иди ной, какие они казлы, но не приплетай к этому что-либо ещё.

наверное ты

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

anonymous
()
Ответ на: комментарий от anonymous

что, шизик, попка вава?

не бывает халявных продуктов, в экономических процессах всё имеет экономический смысл

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

man альтруизм как механизм выживания вида вопреки эгоизму инди(вида)

qulinxao ★★☆
()
Ответ на: комментарий от stevejobs

что, шизик, попка вава?

Кто не ответил ты или я? Кто слился как 5-тилетка - ты или я?

не бывает халявных продуктов

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

в экономических процессах всё имеет экономический смысл

Зачем ты мне пастишь дефолтные пасты? Твоя задача найти этот смысл и сказать его мне как аргумент. Не осилил - твои пасты не имеют смысла, что ты ими хочешь добиться?

Я никогда этого не понимал. Ты надеешься на то, что какой-то мимо проходящий дебил не поймёт, что ты обосрался и тебе нечего сказать? И типа делаешь вид, что контекст спора моё несогласие с твоими пастами?

anonymous
()
Ответ на: комментарий от post-factum

Ну да...

Она старовата, если честно. Я по-этому её не сразу и вспомнил. Зато API сравнительно прост.

О! Я гляжу тут уже лёгкая перестрелка началась... :)))

Если честно, я качнул либу, сижу курю её, да... старовата. Думаю, может бампнуть?

Moisha_Liberman ★★
()
21 июня 2015 г.
Ответ на: комментарий от post-factum

Мне нужно много рандомной статики через него отдавать.

Сколько много? 100k qps? Не ври.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.