Здравствуйте, sz36, Вы писали:
S>Есть предположение, что данная задача уже набила оскомину и человечеством давно решена. В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи. Так, чтобы можно было написать код, обрабатывающий запрос и формирующий ответ, а все остальное уже было бы готовым. Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное. Главное требование — попроще, чтобы можно было сделать быстро и забыть, а не класть жизнь на изучение. Есть такое?
Ищите либу API которой состоит из трёх функций: open, to_do_all, close?
Здравствуйте, sz36, Вы писали:
S>Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.
Если нужно работать с сокетами самостоятельно (т.е. принимать соединения, вычитывать данные из них, десериализовать прочитанные, сериализовать исходящие, записывать, контролировать доступность/недоступность каналов для записи/чтения), то нужно смотреть в сторону Asio, libuv, libevent, POCO, ACE или даже Qt.
Если кроме собственно работы с каналами нужно еще организовывать рабочие потоки для других операций (вроде работы с БД), то тут нужно либо самостоятельно делать очереди сообщений на основе одного из вышеперечисленных инструментов (в ACE, например, есть очереди сообщений и возможности выстраивать в цепочки объекты-обрабочики очередей сообщений, но не очень удобные). Либо использовать более специализированные для обработки потоков сообщений инструменты. Вроде CAF (но там поддержка Windows только за счет MinGW) или SObjectizer. В этом случае работы с IO будут на одном фреймворке, обработка прикладных сообщений/запросов -- на другом.
В случае выбора SObjectizer можно будет расчитывать на помощь его русскоязычных разработчиков
Здравствуйте, sz36, Вы писали:
S>Hi, All!
S>Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.
Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.
Есть предположение, что данная задача уже набила оскомину и человечеством давно решена. В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи. Так, чтобы можно было написать код, обрабатывающий запрос и формирующий ответ, а все остальное уже было бы готовым. Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное. Главное требование — попроще, чтобы можно было сделать быстро и забыть, а не класть жизнь на изучение. Есть такое?
Библиотека должна включать необходимый минимум.
1) Дж. Рихтер, Программирование серверных приложений для Microsoft Windows 2000
2) Дж. Рихтер. Windows для профессионалов.
3) Дж. Рихтер. Windows via C/C++
4) Бьёрн Страуструп Программирование: принципы и практика использования C++, исправленное издание.
5) Бьёрн Страуструп. Язык программирования С++
Это конечно шутка, но как известно в каждой шутке, только, доля шутки
Здравствуйте, sz36, Вы писали:
S>Hi, All!
S> Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, S> а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное.
если библиотека, то буст. если готовый сервер -- сразу вопрос: почему не http? их много маленьких и быстрых. если http не подходит, то задача сформулирована не конкретно.
> Главное требование — попроще, чтобы можно было сделать быстро и забыть, > а не класть жизнь на изучение. Есть такое?
принимать запросы и писать в db -- https://github.com/MariaDB/server или говорите что вам там на самом деле нужно.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали:
М>если библиотека, то буст.
Мыщьх рекоммендует буст — куда мир катится!
Я почему-то был уверен, что ты хардкорный С-шный чувак, не признающий шаблонную магию.)
Здравствуйте, sz36, Вы писали:
S>Hi, All!
S>Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.
S>Есть предположение, что данная задача уже набила оскомину и человечеством давно решена. В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи. Так, чтобы можно было написать код, обрабатывающий запрос и формирующий ответ, а все остальное уже было бы готовым. Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное.
Qt
S>Главное требование — попроще, чтобы можно было сделать быстро и забыть, а не класть жизнь на изучение. Есть такое?
Вот этот пункт Qt не удовлетворяет (если раньше не работали, а если бы работали, то вопрос бы не возникал). Хотя порог вхождения не выше, чем у рекомендованных тут boost и POCO, IMHO.
Здравствуйте, Skorodum, Вы писали:
S>Здравствуйте, мыщъх, Вы писали:
М>>если библиотека, то буст. S>Мыщьх рекоммендует буст — куда мир катится! S>Я почему-то был уверен, что ты хардкорный С-шный чувак, не признающий шаблонную магию.)
этот буст в каждом втором оперсурсе на плюсах. при сборке опенсурса под виндой (если он был для линуха) приходится о бусте иметь по крайней мере самое общее представление. и если бы автор не требовал бы плюсов -- я бы не раздумывая сказал на каких библиотеках для питона это можно сделать легко и непринужденно. а так...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали:
М>если библиотека, то буст. если готовый сервер -- сразу вопрос: почему не http? их много маленьких и быстрых. если http не подходит, то задача сформулирована не конкретно.
В идеальном случае мне бы хотелось, конечно, уже готовый сервер в виде библиотеки или открытого проекта, чтобы можно было написать что-то типа:
int main()
{
Server->RegisterCallback(&MyFunction);
Server->Run();
}
Где MyFunction() — моя функция, которая на входе получает запрос, принятый от клиента, а на выходе формирует ответ на этот запрос. А сервер сам открывает сокет, асептит входящие соединения, принимает/передает, ставит запросы в очередь, распределяет по им же созданным потокам, закрывает мертвые соединения, следит за таймаутами, пишет лог и проч. И главное — корректно обрабатывает ошибки.
Понятно, что в такой постановке задача нерешаема, поскольку серверу, как минимум, нужно знать, где кончается запрос, чтобы передать его в MyFunction()(у нас же поток, поскольку TCP). Но, в общем, что-то близкое, чтобы можно было допилить или настроить сервер на нужный формат запроса.
HTTP сервер, теоретически, наверное можно использовать, но мне не кажется, что это самое простое решение задачи. А хочется именно простого. И еще кажется, что задача настолько типовая, что должны существовать готовые велосипеды.
Здравствуйте, sz36, Вы писали:
S>Здравствуйте, мыщъх, Вы писали:
М>>если библиотека, то буст. если готовый сервер -- сразу вопрос: почему не http? их много маленьких и быстрых. если http не подходит, то задача сформулирована не конкретно.
S> В идеальном случае мне бы хотелось, конечно, уже готовый сервер в виде библиотеки или открытого проекта, чтобы можно было написать что-то типа: S>
S>Где MyFunction() — моя функция, которая на входе получает запрос, принятый от клиента,
http сервер обычно позволяет вам написать свою реализацию функции, вызываемой при получении данных и их декодировании (они могут быть пожаты или зашифрованы).
S>HTTP сервер, теоретически, наверное можно использовать, но мне не кажется, что это самое простое решение задачи.
как раз самое простое и к тому же расширяемое. если завтра потребуется вдруг шифрование или авторизация -- так оно уже есть. вам же не нужно самому писать. оно уже в библиотеках.
S> А хочется именно простого. И еще кажется, что задача настолько типовая, что должны существовать готовые велосипеды.
один из них -- http. еще есть apache qpid. возможно, он вам подойдет лучше всего.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, sz36, Вы писали:
S>HTTP сервер, теоретически, наверное можно использовать, но мне не кажется, что это самое простое решение задачи. А хочется именно простого. И еще кажется, что задача настолько типовая, что должны существовать готовые велосипеды.
Зато Вы получаете возможность траверса через всякие там файрволы и т.п., ибо на них с высокой вероятностью может быть правило по пробросу http. Очень пригодится при дальнейшем развёртывании.