LINUX.ORG.RU

Web-разработка на C

 , , , ,


1

4

99% веб-сервисов я пишу на Go, поскольку для этого он очень удобен, особенно вместе с https://www.gorillatoolkit.org/. Сейчас с целью эксперимента и повышения навыка в C хочу сделать небольшой сервис (выйдет около 500-1000 строк). Изучил как люди делают и, кажется, все делают совершенно по-разному. Кто-то использует socket’ы напрямую, кто-то работает через либы с http, кто-то через fastCGI, кто-то вообще делает приложение как модуль для nginx’а.

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

C почти не используется для написания серьёзных уеб-приложений, но по-моему самым логичным тут будет интегрировать fastcgi/nginx чтобы не встраивать сервер - там вся эта инфраструктура уже продумана. Реально C исторически используется с классическим cgi, но это неэффективно т.к требует создавать по процессу на запрос.

mittorn ★★★★★
()

Если есть желание перезагрузить проект, есть уже готовый vsftpd.

sanaris
()

Можешь посмотреть libwebsockets, я правда им не пользовался. Но там http(s) сервер, роутинг, итд...

stasolog
()

Kore.io хотя я давно не пробовал, но штука удобная

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от beastie

Мой аргумент «за» сводится только к одному пункту: mux с его приятным роутингом. Можно за несколько строк получить нужную информацию о пути запроса и направить его в обработку в соответствии функции. Какие твои аргументы против? Может есть что-то лучше. Что используешь сам для таких целей?

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

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

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

Для замены stdlib mux есть в частности очен неплохой Julien Schmidt’s Mux. Но в большенстве случаев stdlib более чем достаточен.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

с целью эксперимента и повышения навыка

Пиши веб-сервер самостоятельно.

WitcherGeralt ★★
()

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

Насколько знаю, PHP на C написан. Даже фреймворк под него на C есть. Вот - https://phalcon.io/en-us

anonymous
()

Возьму fastcgi. Из всего что изучил, для первого веб-сервиса на C он подходит больше всего.

brualan
() автор топика
Ответ на: комментарий от Iron_Bug

Про скилы обидно( Уже несколько лет пишу на C утилиты для обработки данных (50+ GB). Тащу C в backend, во многом что бы можно было удобно работать с данными приходящими из сети

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

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

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

Оно то понятно. Просто тут как-то почти вслепую было сказано. Я видимо попал под какой-то стереотип)

brualan
() автор топика
Ответ на: комментарий от gedisdone

Что в C особенного, чего не хватает в остальных языках?

Страданий?

AUX ★★★★
()

Mongoose web server можно посмотреть. Это веб-сервер встраиваемый в приложение, а не наоборот;)

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

Я тяну C в веб, что бы можно использовать инструменты анализа данных, которые написаны на C (по большей частью мною же). Изначально выбор в пользу C был сделан из-за тонкого контроля, который он даёт над машиной, по сравнению с другими высокоуровневыми языками. Отсюда мы получаем: высокую скорость работы (10с на С вместо 46 на Go), минимальное потребление памяти (12Гб С против 16 у Go). Если коротко, то ничего быстрее С нету (если знать, что делаешь)

brualan
() автор топика

Обратите внимание на [url]https://kore.io/[/url] Довольно зрелый фреймворк. Если бы у меня была такая задача, я первым делом обратил бы внимание на kore.io

sakal
()
Последнее исправление: sakal (всего исправлений: 2)
Ответ на: комментарий от brualan

common practice.

Бро, вот я не понимаю, почему тебе всю ресурсозатратную хрень не написать на си и дёргать из Go или пистона?

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

зачем тогда го и разговоры про 500-1000 строк. со скиллами го не нужен, а понимание того, что на 1000 строк только хэлловорлд можно накатать должно уже прийти.

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

со скиллами го не нужен

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

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

Столько сайтов и веб-приложений на Си. И всем так нужны 4ГБ, что готовы оплачивать гораздо более длительную и дорогую разработку, что аж Го не нужен.

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

именно потому я и подумала про нуба. с чего опытному программисту это использовать?

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

кстати, да. копроративная поделка гугла же. только у них где-то и используется. но не на основных сервисах, а для скриптятины. а основные тяжёлые приложения они на С/C++ пилят.

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

на го не намного больше

Решает архитектура, а не ЯП. И железа всегда проще докупить, чем разработку оплачивать.

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

а основные тяжёлые приложения они на С/C++ пилят

Ага, в твоих фантазиях. Гуглрвики только в Ноду умеют. Го для них – новая Мекка.

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

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

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

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

Я просто фантазит называю фантазиями. Тебе нравиться витать в облаках, а мне спускать тебя на землю. Взаимная выгода.

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

нет. не в моих фантазиях. они работу предлагают. вообще, крупные компании часто ищут программистов на C/C++. там есть где применить и оптимизацию, и скорость. а все эти поделия домашние - это фигня. как мелкософт свой софт не пишет на шарпе, предоставляя это сомнительное удовольствие юзерам, так и гуглу на рабочих серверах го никуда не упёрся.

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

Бро, вот я не понимаю, почему тебе всю ресурсозатратную хрень не написать на си и дёргать из Go или пистона?

Или использовать сишный код как CGI-приложение на каком-то отдельном запросе. В таком случае вся вебня из сишной части уйдет, останется всего-лишь прочитать параметры запроса из переменных окружения и в конце распечатать ответ в виде, например, JSON

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

С был и есть компилятор компиляторов - при этом оказалось часто люди пишущие напрямую на вход компилятору компиляторов дешевле чем посредством языка транслируемого компилятором компиляторов

гошкой в гугле вполне пользуются при этом осознают когда есть польза и интерес переписывать ручками горячие го-куски в ацкую сишку.

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

Я тяну C в веб, что бы можно использовать инструменты анализа данных, которые написаны на C (по большей частью мною же).

Это веб-сервис для интернета или внутреннего пользования? [*] Если первое, то преполагается ли частое обращение к сишному коду в нормальных условиях эксплуатации (т.е. настроено кэширование на веб-серевере, нет ддоса, и т.д.)

[*] Если это какая-то админка интернет-сервиса, количество пользователей которой не измеряется тысячами, то это скорее второе, чем первое

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)

кто-то вообще делает приложение как модуль для nginx’а

Про это сразу забудь

темплейтов

Из сишки надо вернуть структурированные данные (в большинстве случаев уместен JSON), а шаблонизированием пусть занимается js-фронетенд, или на худой конец скриптовый или гошный бэкэнд

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

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

Чел не ищет лёгких путей. Он изучает сишку и пихает её везде.

AUX ★★★★
()

Прогнали тесты Nginx+c(fastcgi) vs nginx+go(http)

Потребление памяти в пике получалось командой grep VmPeak /proc/$PID/status Потребление CPU в пике получалось обработкой вывода top -n 5000 -b

Простой ответ в text/plain «Hello world!» при 10 000 rps в течении 10 минут. Обе программы стоять за nginx’ом. Nginx везде потреблял в пределах погрешности, поэтому его не привожу

Go:
CPU в пике: 2.1%
Память в пике 547324 kB

С:
CPU в пике: 0.1%
Память в пике: 8784 kB

Обработка двух тестовых файлов с данными на 10GB и 12GB.

  • Текущая конфигурация: данные -> nginx -> go (приём http, предварительная обработка и вызов C’ших функций) -> C

  • Новая конфигурация: данные -> nginx -> C (fastcgi)

Текущая:
CPU в пике: 83.1%
Память в пике 36GB
Время обработки: 3:21
IO утилизация: 81.3%

Новая:
CPU в пике: 61.2%
Память в пике: 31GB
Время обработки: 2:49
IO утилизация: 94.6%

И приятная мелочь

du -sh hello/c.bin hello/go.bin real/c.bin real/go.bin real/c-go-helper.bin
12K      hello/c.bin
7,1M     hello/go.bin
41K      real/c.bin
25,1M    real/go.bin
35K      real/c-go-helper.bin
brualan
() автор топика

лучше всего - выполнять в виде модуля ядра на питоне 👍

anonymous
()

посмотри ulfius (https://github.com/babelouest/ulfius) он конечно поверх всяких microhttpd и jansson, но всё лишнее хорошо спрятано и выдан компактный понятный API. Веб-сервисы включая веб-сокеты на чистом C пишутся влёт

MKuznetsov ★★★★★
()
8 сентября 2020 г.
Ответ на: комментарий от Iron_Bug

только у них где-то и используется. но не на основных сервисах, а для скриптятины

а основные тяжёлые приложения они на С/C++ пилят.

Инфа сотка?

vertexua ★★★★★
()

Чисто как пример посмотри fossil - это скв всё в одном, автор запихал в один бинарник всё и скв и сайт и много чего ещё, код выглядит конечно страшновато, плюс разработчик - автор sqlite, поэтому приплёл туда и его, но работает как по мне прям огонь.

AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.