LINUX.ORG.RU

C++ server library

 , ,


1

2

Мне часто приходится поднимать всякие странные расчётные вещи для веб.
У меня за много лет подобной возни родилась небольшая библиотечка, которая делает из обычного кода сервер.
Но библиотека уже много лет как напрашивается на рефакторинг, а тут ещё и выход свежего плюсового стандарта...
В общем разыскивается либа, написанная умными людьми, которая будет из себя представлять серверную обвязку.
Многопоточность не важна, но желательна.
HTTP протокол интересен, но не важен.
Есть что-то такое? Ну или хотя бы как гуглить подскажите — я что-то ничего подобного не нахожу, хотя уверен, что пару лет назад я что-то такое видел.

★★☆
Ответ на: комментарий от yoghurt

Гм...
Что-то я примеры глянул, а оно страшное как моя жизнь.
Многословность чем-то жабу напомнила...
Это так и надо?

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

Гугл находит только что-то жабоскриптовое.

В смысле? Zeromq на плюсах написано с сишным апи, protobuf просто ++ из коробки.

ebantrop
()
Ответ на: комментарий от no-such-file

libpoco

Не могу примеры кода найти.
На сайте у них кучу «маркетологоориентированных» pdf.
А мне нужен простой пример, скажем, echo-сервера.

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

Qt

Хм. Посмотрел на примеры — вроде неплохо.
Ты сам использовал его для этих целей?
Есть какие-то нюансы?

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

Есть какие-то нюансы?

у кьюта есть проблемы на больших объемах. если надо шустрый сервер то смотри в сторону go

MikeDM ★★★★★
()

Есть еще libsockets. Сам ее я не использовал, но судя по описанию умеет SSL, HTTP.

m0rph ★★★★★
()
Ответ на: комментарий от no-such-file

Ну да, щас посмотрел вроде шевелятся. У меня от библиотечки двойственное ощущение осталось - вроде как всё есть, но как то оно не допиленно что ли. Ещё были проблеммы с её компиляцией, особенно под старые gcc, и под arm.
Но если надо что то по быстрому запиливать для server side время от времени - то имхо, самое оно.

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

Дык это разве не транспорт/коммуникация?
Автору, я так понял надо по быстрому время от времени пилить некие REST API, для веба.

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

REST API

А? Мне просто нужен демон, который принимает по сети одну строку и отдаёт другую.
WEB в худшем смысле этого слова (HTTP и прочий ужас) меня мало волнует.

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

тогда boost::asio или Poco или isl - на выбор, что больше понравится:) Да и в 11 стандарте из коробки есть всё что тебе нужно по идее. Если нагрузка не очень большая - то даже Qt сгодиться, но это не комильфо.

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

А? Мне просто нужен демон, который принимает по сети одну строку и отдаёт другую.

Так уже готовых решений навалом. На чем только не написаных. От Си до perl и явы. Ткнись в гугл то.

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

Ну хуже, чем апач+ПХП оно же быть не может?

это уже от тебя зависит.

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

Дык это разве не транспорт/коммуникация?

Не знаю что подразумевается под транспортом, но zeromq очень простая и легкая либа для передачи сообщений. Грубо говоря с одного конца закинул N байт, с другого ровно N байт вылезло. Все остальные детали по поводу установки соединения, передачи, ошибок и прочего спрятано внутри. Есть несколько готовых паттернов использования, ну или типов сокетов.

Чтоб не городить свой велосипед с форматом пакетов, а кидаю туда-сюда структуры упакованные protobuf'ом. Работает быстро и просто почти везде.

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

Не, я в смысле о том, что разве оно не подразумевает, что на каждом endpoint'е стоит zmq?
Просто ТС не очень ясно высказал своё желание, если и клиент и сервер в его власти, то конечно, готовых решений пруд пруди. Но в топике было только ключевые слова «сервер» и «web»:) Protobuf тот же, конечно можно из js воркать, но нужно ли оно, и есть ли туда доступ - это вопрос. В общем, если интерфейсы взаимодействия во власти ТС это одно, а если он только сервер с число-дробилкой и на клиент сайд повлиять не может, это уже другое.

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

Не, я в смысле о том, что разве оно не подразумевает, что на каждом endpoint'е стоит zmq? Просто ТС не очень ясно высказал своё желание,...

А, ну так да, непонятно.

...если и клиент и сервер в его власти, то конечно, готовых решений пруд пруди.

Да, много. Я искал остановился на этой связке из-за простоты и скорости. Может что еще сейчас есть?

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

Ну тот же soap. Ну а чего то обьективно лучше/хуже zmq, не не посоветую. Можно на многообразие сих поделий, например тут глянуть.

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

Да, последнее время почти весь С++ код (в том числе и работающий с сетью) пишу на Qt. Фреймворк устроен так, что напороться на какие-либо неприятности очень сложно. Есть тонкости при работе в многопоточном окружении (в частности, с соединением можно работать только из одного потока и создавать объект соединения нужно в этом потоке), но они достаточно подробно описаны в документации. Документация — вообще одна из самых хороших среди С++-фреймворков.

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

Проблем с производительностью я не испытываю. Пробный сервер на wsgi спокойно обрабатывает 9к запросов к hello world (вида принять соединение, прочитать, записать, закрыть) в секунду. В целом считается, что сигналы/слоты действительно медленные, но это тоже при желании фиксится через eventdispatcher. Если я не ошибаюсь, в Qt5 на Linux перешли на eventfd вместо pipe для сигналов между тредами, что на порядок увеличило производительность.

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

на Qt

Я пока к нему и склоняюсь.
Не в последнюю очередь из-за того, что я уже успел в своё время написать HelloWorld на Qt и, думаю, мне легче будет разобраться с Qt, который вылизывают и всячески развивают, чем с какой-либо левой библиотекой.

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

Я для такого zmq вместе с protobuf пользую.

Всячески плюсую :)

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

Wt++ если веб на сях.

Плюсую! Wt (webtoolkit, witty) - очень простое средство написания динамических очень сложных сайтов целиком на C++, я лишь немного эту штуку изучал, но с ходу получилось очень очень многое, особенно по примерам с сайта.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Stahl

Я пока к нему и склоняюсь.

Смело склоняйся к Wt - по заявлениям авторов, они взяли модель Qt для Wt. Там это сразу ощущается. Wt достаточно развит.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Смело склоняйся к Wt - по заявлениям авторов, они взяли модель Qt для Wt.

Более того, там boost::asio для серверной части. Так что с производительностью там все збс.

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