Сетевая библиотека для серверной части mmorpg (libuv / boost :: asio?)

В настоящее время я переписываю серверную часть очень старого mmorpg и искал хорошую сетевую библиотеку с открытым исходным кодом для использования с C / C ++.

Поскольку клиент уже существует, я не могу использовать какую-либо библиотеку, которая обеспечивает какую-то структуру пакетов или связь (как, например, RakNet).

Сервер будет использовать в основном UDP на трех разных портах.

После поиска в интернете я узнал о boost :: asio и libuv.

Boost :: asio кажется зрелым вариантом, так как я уже буду использовать boost, но я читал, что их реализация UDP немного плохая, и что он не может достичь максимальной производительности многоядерного процессора из-за некоторых блокировок при использовании Epoll.

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

Что вы, люди, думаете? Могу ли я использовать libuv в таком проекте или мне придется использовать boost :: asio? Я также открыт для других предложений (они должны быть кроссплатформенными, и я уже отказался от enet, libevent и libev).

7

Решение

Либо libuv, либо Boost.Asio должны быть в порядке. Я наблюдал похожие результаты между библиотеками как в приложениях реального времени, так и почти в реальном времени.

Если вы используете Boost.Asio, помните:

  • Как минимизировать количество выделение памяти обработчику.
  • io_service блокировка может быть устранена путем предоставления concurrency_hint от 1 до io_service конструктор. Однако это не помешает блокировке внутри реактора.

Из моего опыта разработки игр:

  • Если сетевые возможности предоставляются игровому коду через интерфейс или очередь, то довольно просто переключаться между одной библиотекой на основе событий на другую библиотеку на основе событий, такую ​​как Boost.Asio и libuv.
  • Архитектура сервера оказывает гораздо большее влияние, чем сам сетевой код. И Boost.Asio, и libuv предоставляют функциональные возможности IPC, которые могут быть полезны для архитектур с несколькими демонами.

Хотя между двумя библиотеками есть некоторое совпадение, возможно, стоит прочитать этот сравнение.

5

Другие решения

libevent превосходен, и меня удивляет, что вы от него отказались. ZeroMQ довольно хорош, но поддержка Windows немного ограничена. RabbitMQ — мой друг в SF.

Boost.asio тоже очень хорошо. Так как кажется, что вы ограничены C ++, то я использую libevent, и он должен намного опережать другие названия MMO, над которыми я работал, с точки зрения задержки в сети и отзывчивой сети, но для этого требуется tcp.

1

По вопросам рекламы [email protected]