Библиотека для написания сервера
От: sz36 Россия  
Дата: 14.03.15 13:24
Оценка:
Hi, All!

Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.

Есть предположение, что данная задача уже набила оскомину и человечеством давно решена. В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи. Так, чтобы можно было написать код, обрабатывающий запрос и формирующий ответ, а все остальное уже было бы готовым. Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное. Главное требование — попроще, чтобы можно было сделать быстро и забыть, а не класть жизнь на изучение. Есть такое?
Re: Библиотека для написания сервера
От: smeeld  
Дата: 14.03.15 13:29
Оценка: +2
Здравствуйте, sz36, Вы писали:

S>Есть предположение, что данная задача уже набила оскомину и человечеством давно решена. В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи. Так, чтобы можно было написать код, обрабатывающий запрос и формирующий ответ, а все остальное уже было бы готовым. Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное. Главное требование — попроще, чтобы можно было сделать быстро и забыть, а не класть жизнь на изучение. Есть такое?


Ищите либу API которой состоит из трёх функций: open, to_do_all, close?
Re: (-) POCO
От: __Nicolay Россия  
Дата: 14.03.15 13:33
Оценка: 4 (1) +1
Re: nodejs? (-)
От: slay93  
Дата: 14.03.15 14:07
Оценка: 4 (1) +1
Re: Библиотека для написания сервера
От: niXman Ниоткуда https://github.com/niXman
Дата: 14.03.15 15:17
Оценка: 4 (1)
YARMI?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Библиотека для написания сервера
От: Sni4ok  
Дата: 14.03.15 17:06
Оценка: 4 (1)
Здравствуйте, sz36, Вы писали:

S>В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи.


zeromq
Re: Библиотека для написания сервера
От: kgrach Россия  
Дата: 14.03.15 18:05
Оценка:
Здравствуйте, sz36, Вы писали:

Библиотека должна включать необходимый минимум.
1) Дж. Рихтер, Программирование серверных приложений для Microsoft Windows 2000
2) Дж. Рихтер. Windows для профессионалов.
3) Дж. Рихтер. Windows via C/C++
4) Бьёрн Страуструп Программирование: принципы и практика использования C++, исправленное издание.
5) Бьёрн Страуструп. Язык программирования С++

Это конечно шутка, но как известно в каждой шутке, только, доля шутки

Удачи
Re: Библиотека для написания сервера
От: nen777w  
Дата: 14.03.15 19:26
Оценка: 4 (1)
S> Есть такое?

Вот тут уже не первый раз появляется информация об SObjectizer
Автор: nshmakov
Дата: 12.02.15

Вроде по описанию штука хорошая, но у меня пока руки не доходят попробовать.
Re: Библиотека для написания сервера
От: мыщъх США http://nezumi-lab.org
Дата: 14.03.15 19:35
Оценка:
Здравствуйте, 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.
Re[2]: офф
От: Skorodum Россия  
Дата: 14.03.15 21:34
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>если библиотека, то буст.

Мыщьх рекоммендует буст — куда мир катится!
Я почему-то был уверен, что ты хардкорный С-шный чувак, не признающий шаблонную магию.)
Re: Qt
От: Skorodum Россия  
Дата: 14.03.15 21:38
Оценка:
Здравствуйте, sz36, Вы писали:

S>Hi, All!


S>Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.


S>Есть предположение, что данная задача уже набила оскомину и человечеством давно решена. В связи с чем просьба накидать ссылок или посоветовать какую-нибудь библиотеку попроще для решения подобной задачи. Так, чтобы можно было написать код, обрабатывающий запрос и формирующий ответ, а все остальное уже было бы готовым. Платформа — Windows, язык C++. В результате должен получиться готовый автономный сервис, а не плагин к какому-нибудь апачу. Можно платное решение, но лучше бесплатное.

Qt

S>Главное требование — попроще, чтобы можно было сделать быстро и забыть, а не класть жизнь на изучение. Есть такое?

Вот этот пункт Qt не удовлетворяет (если раньше не работали, а если бы работали, то вопрос бы не возникал). Хотя порог вхождения не выше, чем у рекомендованных тут boost и POCO, IMHO.
Re[3]: офф
От: мыщъх США http://nezumi-lab.org
Дата: 14.03.15 22:14
Оценка:
Здравствуйте, 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.
Re[2]: Библиотека для написания сервера
От: sz36 Россия  
Дата: 14.03.15 22:21
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>если библиотека, то буст. если готовый сервер -- сразу вопрос: почему не http? их много маленьких и быстрых. если http не подходит, то задача сформулирована не конкретно.


В идеальном случае мне бы хотелось, конечно, уже готовый сервер в виде библиотеки или открытого проекта, чтобы можно было написать что-то типа:
int main()
{
  Server->RegisterCallback(&MyFunction);
  Server->Run();
}


Где MyFunction() — моя функция, которая на входе получает запрос, принятый от клиента, а на выходе формирует ответ на этот запрос. А сервер сам открывает сокет, асептит входящие соединения, принимает/передает, ставит запросы в очередь, распределяет по им же созданным потокам, закрывает мертвые соединения, следит за таймаутами, пишет лог и проч. И главное — корректно обрабатывает ошибки.

Понятно, что в такой постановке задача нерешаема, поскольку серверу, как минимум, нужно знать, где кончается запрос, чтобы передать его в MyFunction()(у нас же поток, поскольку TCP). Но, в общем, что-то близкое, чтобы можно было допилить или настроить сервер на нужный формат запроса.

HTTP сервер, теоретически, наверное можно использовать, но мне не кажется, что это самое простое решение задачи. А хочется именно простого. И еще кажется, что задача настолько типовая, что должны существовать готовые велосипеды.
Re: Библиотека для написания сервера
От: sz36 Россия  
Дата: 14.03.15 22:22
Оценка:
Спасибо всем ответившим, пошел изучать.
Re[3]: Библиотека для написания сервера
От: мыщъх США http://nezumi-lab.org
Дата: 15.03.15 00:19
Оценка:
Здравствуйте, sz36, Вы писали:

S>Здравствуйте, мыщъх, Вы писали:


М>>если библиотека, то буст. если готовый сервер -- сразу вопрос: почему не http? их много маленьких и быстрых. если http не подходит, то задача сформулирована не конкретно.


S> В идеальном случае мне бы хотелось, конечно, уже готовый сервер в виде библиотеки или открытого проекта, чтобы можно было написать что-то типа:

S>
S>int main()
S>{
S>  Server->RegisterCallback(&MyFunction);
S>  Server->Run();
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.
Re: Библиотека для написания сервера
От: so5team https://stiffstream.com
Дата: 15.03.15 07:59
Оценка: 4 (1)
Здравствуйте, sz36, Вы писали:

S>Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.


Если нужно работать с сокетами самостоятельно (т.е. принимать соединения, вычитывать данные из них, десериализовать прочитанные, сериализовать исходящие, записывать, контролировать доступность/недоступность каналов для записи/чтения), то нужно смотреть в сторону Asio, libuv, libevent, POCO, ACE или даже Qt.

Если кроме собственно работы с каналами нужно еще организовывать рабочие потоки для других операций (вроде работы с БД), то тут нужно либо самостоятельно делать очереди сообщений на основе одного из вышеперечисленных инструментов (в ACE, например, есть очереди сообщений и возможности выстраивать в цепочки объекты-обрабочики очередей сообщений, но не очень удобные). Либо использовать более специализированные для обработки потоков сообщений инструменты. Вроде CAF (но там поддержка Windows только за счет MinGW) или SObjectizer. В этом случае работы с IO будут на одном фреймворке, обработка прикладных сообщений/запросов -- на другом.

В случае выбора SObjectizer можно будет расчитывать на помощь его русскоязычных разработчиков
Re: Библиотека для написания сервера
От: BulatZiganshin  
Дата: 16.03.15 17:45
Оценка:
Здравствуйте, sz36, Вы писали:

http://stackoverflow.com/questions/11423426/how-does-libuv-compare-to-boost-asio
Люди, я люблю вас! Будьте бдительны!!!
Re: Библиотека для написания сервера
От: Sanik Россия http://sergeysthoughts.blogspot.com/
Дата: 17.03.15 14:43
Оценка: +1
Здравствуйте, sz36, Вы писали:

S>Hi, All!


S>Возникла задача написания несложного сервера. Сервер должен принимать запросы клиентов, читать/писать в БД, формировать ответ и отправлять его клиентам. Протокол свой. Нагрузка и кол-во клиентов не предполагаются слишком большими, но, в тоже время и не настолько малыми, чтобы обойтись одним потоком или иметь по потоку на клиента. Лучше всего будет использование очереди запросов и пула потоков.


Splunk pion

Но исключительно для протокола HTTP
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[3]: Библиотека для написания сервера
От: Mr.Delphist  
Дата: 18.03.15 16:46
Оценка:
Здравствуйте, sz36, Вы писали:

S>HTTP сервер, теоретически, наверное можно использовать, но мне не кажется, что это самое простое решение задачи. А хочется именно простого. И еще кажется, что задача настолько типовая, что должны существовать готовые велосипеды.


Зато Вы получаете возможность траверса через всякие там файрволы и т.п., ибо на них с высокой вероятностью может быть правило по пробросу http. Очень пригодится при дальнейшем развёртывании.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.