В настоящее время я переписываю серверную часть очень старого mmorpg и искал хорошую сетевую библиотеку с открытым исходным кодом для использования с C / C ++.
Поскольку клиент уже существует, я не могу использовать какую-либо библиотеку, которая обеспечивает какую-то структуру пакетов или связь (как, например, RakNet).
Сервер будет использовать в основном UDP на трех разных портах.
После поиска в интернете я узнал о boost :: asio и libuv.
Boost :: asio кажется зрелым вариантом, так как я уже буду использовать boost, но я читал, что их реализация UDP немного плохая, и что он не может достичь максимальной производительности многоядерного процессора из-за некоторых блокировок при использовании Epoll.
libuv выглядит великолепно, управляется событиями, поддерживается большим проектом, но в настоящее время нет проектов такого рода, использующих его, поэтому я сомневаюсь в его назначении.
Что вы, люди, думаете? Могу ли я использовать libuv в таком проекте или мне придется использовать boost :: asio? Я также открыт для других предложений (они должны быть кроссплатформенными, и я уже отказался от enet, libevent и libev).
Либо libuv, либо Boost.Asio должны быть в порядке. Я наблюдал похожие результаты между библиотеками как в приложениях реального времени, так и почти в реальном времени.
Если вы используете Boost.Asio, помните:
io_service
блокировка может быть устранена путем предоставления concurrency_hint от 1 до io_service
конструктор. Однако это не помешает блокировке внутри реактора.Из моего опыта разработки игр:
Хотя между двумя библиотеками есть некоторое совпадение, возможно, стоит прочитать этот сравнение.
libevent превосходен, и меня удивляет, что вы от него отказались. ZeroMQ довольно хорош, но поддержка Windows немного ограничена. RabbitMQ — мой друг в SF.
Boost.asio тоже очень хорошо. Так как кажется, что вы ограничены C ++, то я использую libevent, и он должен намного опережать другие названия MMO, над которыми я работал, с точки зрения задержки в сети и отзывчивой сети, но для этого требуется tcp.