Подтвердить что ты не робот

Создание высокопроизводительного сетевого сервера в С++

Мне нужно создать сетевой сервер на С++ для торгового приложения. Сетевому серверу необходимо выполнить следующие задачи:

  • обрабатывать аутентификацию клиентов и предоставлять идентификатор сеанса для каждого сессии.

  • обрабатывать заказы, исходящие от клиентов, и информировать клиентов о их исполнение.

  • обрабатывает другой запрос данных, запрошенный клиентами, и отправляет данные обратно к ним.

Я планирую использовать сетевую библиотеку Boost.Asio и буферы протокола Google для реализации сообщений, отправляемых от клиентов на сервер. Подходы, основанные на XML-RPC или SOAP, - это строгое отсутствие-нет, поскольку задержка является большой проблемой.

У меня есть следующие вопросы для сообщества stackoverflow:

  • Это хорошая идея для реализации этих сообщений с использованием протокола буферы? Я также рассматриваю возможность отправки сообщений. библиотеки для ее реализации. Когда я смотрю на код, я нахожусь более уверенно в реализации этого с повышением сериализации и Заголовки Google protobuf выглядят слишком тяжело. Какой из этих методов будет: a) более ремонтопригодным и b) потребует меньше усилий? Я полагаю, оба этих подхода будут работать на разных платформах.

  • Есть ли какая-либо другая сетевая библиотека, на которую я должен смотреть отдельно от Boost.Asio.? Я нахожу ACE немного датированным, насколько С++-кодирование стиль.

  • В конце концов, я хочу, чтобы этот сетевой сервер работал на SSL, однако у меня нет опыта внедрения SSL. Как много усилий потребовалось бы для перехода на SSL позже. Должен ли я начинать с SSL или его можно добавить позже?

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

4b9b3361

Ответ 1

Вы также должны посмотреть Apache Thrift (созданный в Facebook) или Apache Etch (первоначально разработанный Cisco). Они являются средами RPC, которые облегчают разработку как серверов, так и клиентов, удовлетворяющих вашим потребностям (более или менее). Для структуры, разработанной с использованием protobuf и boost.asio, просмотрите проект server1.

Ответ 2

BSON (http://www.mongodb.org/display/DOCS/BSON и http://bsonspec.org) - очень быстрый бинарный протокол. Реализация С++ легко доступна из mongodb. Тот факт, что это в основном JSON, довольно легко реализует и поддерживает.

Реализация SSL не добавляет много дополнительного кода для сервера на основе asio: инициализация контекста SSL с помощью путей сертификата и некоторая рукопожатие.

Ответ 4

Если вам разрешено приобретать библиотеку полки для сети, посмотрите на JetBytes Server Framework для ваших сетевых потребностей. Я помню, что читал, что это тяжелый подъем для PayPoint. Лен Холгейт (человек, стоящий за компанией и библиотекой) активен на этих форумах.

Ответ 5

Взгляните на www.zeromq.org

Это не совсем то, что вы просили, но это то, что окончательно решит вашу проблему и ускорит ваше развитие.

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

Он также используется во многих торговых серверах.

Ответ 6

Я немного опаздываю на вечеринку, но я хотел бросить POCO (http://pocoproject.org/) на ринг. Я не скажу, что это лучше, чем ASIO (потому что это не так), но это так же хорошо. И если вы не бог шаблона, вы найдете POCO восхитительным. Определенно лучше, чем ACE, который немного длиннее в зубе.

Ответ 7

следующие задачи:

  • обрабатывать аутентификацию клиентов и предоставлять идентификатор сеанса для каждого сеанса.

Если у вас есть SSL с самого начала, вы можете иметь сервер и клиентское удостоверение, которое будет охватывать эта задача без необходимости добавлять дополнительные пользовательские auth к вашим приложениям клиент/сервер.