Масштабируемая серверная среда на C++

Я хочу написать серверное приложение на С++, предназначенное для одновременной обработки десятков тысяч клиентов. Он должен работать под Windows и Linux. Я искал фреймворки и библиотеки и наткнулся на Boost Asio, который кажется очень зрелой и широко используемой альтернативой. У меня просто проблемы с обдумыванием цепочек/пулов потоков, в основном из-за миллионов шаблонов. Мой опыт в основном связан с C, поэтому я не очень привык к беспорядку шаблонов, которым в общем кажется Boost. Я пытался найти кого-то, кто разработал бы относительно тонкую оболочку для Boost Asio, которая позаботилась бы об аспекте многопоточности/синхронизации, используя пряди, привязку и тому подобное, но пока не смог найти кого-то, кто мог бы сделать это в рамках моего бюджета (2 или 300 долларов США).

Может ли кто-нибудь из вас порекомендовать какие-либо другие библиотеки, которые масштабируются так же, как Boost Asio (например, с IOCP в Windows и epoll в Linux и т. д.), или источник, где я мог бы найти опытных разработчиков Boost, ищущих небольшие внештатные вакансии?

Большое спасибо заранее за любую помощь.

С уважением,

Филип Беннефолл


person Philip Bennefall    schedule 15.07.2011    source источник


Ответы (4)


4 лучших варианта, которые я знаю

Мне очень нравится zeromq.. но libuv кажется интересным.. (libev и libevent тоже очень хороши)

person Felipe Cruz    schedule 15.07.2011

ACE — это та структура, которую вы ищете. Даже boost Asio — это всего лишь реализация шаблона Proactor, который был представлен Дугласом С. Шмидтом. Он наиболее известен как автор POSA Vol.2 и создатель фреймворка ACE.

Библиотека Boost.Asio предлагает параллельную поддержку синхронных и асинхронных операций... на основе шаблона проектирования Proactor [POSA2].

Хотя это кроссплатформенный сетевой фреймворк C++ и использует шаблон, используется только простой шаблон. (или вообще нет)

Мой опыт тоже в основном связан с C, и мне не нравится массивный стиль программирования шаблонов Boost. Однако ACE не был таким.

person ddoman    schedule 22.07.2011
comment
Мое мнение об ACE только для исследования сетевого программирования. Не для производственного использования. - person Magic; 10.02.2012
comment
ACE ужасно написан, это самый запутанный сетевой фреймворк, с которым я когда-либо работал. - person expert; 22.09.2012
comment
Эмм, согласен, ACE довольно неуклюжий по современным меркам, но, пожалуйста, не будьте к нему слишком строги. ACE развился в период до того, как компиляторы С++ были даже отдаленно совместимы со стандартами - отсюда и клудж. И есть множество телекоммуникационных компаний, использующих серверы на базе ACE. Тем не менее, время на солнце почти готово. - person quixver; 20.02.2013

Попробуйте libevent для размера. Весь смысл его существования заключается в решении проблемы C10K. Я бы сказал, что он, вероятно, более легкий, чем буст.

person Chris Eberle    schedule 15.07.2011
comment
Не то, чтобы меня это ужасно заботило, но не хотел бы голосующий объяснить, почему он / она не согласен? - person Chris Eberle; 15.07.2011
comment
Спасибо за предложение, Крис. Я заглянул в библиотеку, и это кажется интересным наверняка. Я начну взламывать это. Спасибо! - person Philip Bennefall; 15.07.2011
comment
Проблема для меня в том, что я использую так называемую программу чтения с экрана, потому что я слепой, и по какой-то причине я не могу вызвать команду принятия ответа. Он просто отображается как обычный текст, а не как ссылка, кнопка или даже кликабельная область. Поэтому, хотя я, безусловно, принял бы ответы, если бы мог, в настоящее время я не знаю, как это сделать. - person Philip Bennefall; 16.07.2011
comment
Очень интересно, это может быть чем-то, что можно опубликовать на meta.stackoverflow.com. Я уверен, что вы не единственный с этой проблемой. - person Chris Eberle; 16.07.2011

Попробуйте Pulsar Server Framework. Основное преимущество заключается в том, что он построен на основе сетевой библиотеки libuv (используемой node.js), которая использует асинхронный ввод-вывод на основе циклов событий.

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

  2. Он предназначен для работы с фермой серверов.

  3. Легко настраиваемый и простой в использовании

В настоящее время он был построен для сервера Windows x64.

person Atul    schedule 04.07.2018