Как написать игровой сервер на Qt?

Всем привет,

Есть задача написать игровой сервер для пошаговой стратегии. Планируемая загруженность 2000-2500 игроков пиковой нагрузки. Целевая платформа для сервера — *nix (скорее всего ubuntu server, может быть freebsd)

Хотелось бы узнать, подойдет ли для этих целей Qt, и какие могут возникнуть подводные камни? Интересует следующее:

Достаточно ли производителен данный инструмент в этих целях? (условимся, что у разработчика прямые руки)

Сложность реализации по сравнению с альтернативными инструментами java/C++.

Вообще вменяемость идеи. (может быть Qt не предназначен для этого и стоит посмотреть на другие инструменты?)
  • Вопрос задан
  • 6926 просмотров
Пригласить эксперта
Ответы на вопрос 8
Riateche
@Riateche
Я думаю, подойдет. При наличии прямых рук Qt никак не сдерживает быстродействие.

Нативный код на C++/Qt точно будет работать быстрее и кушать меньше ресурсов, чем Java. Писать на чистом C++, на мой взгляд, сложнее, чем на Qt. Что касается других C++ библиотек, то найти достойную альтернативу непросто. Qt — простая в использовании, хорошо документированная, мощная библиотека общего назначения. В Qt есть много возможностей, которые можно задействовать при реализации вашей задачи (включая вышеупомянутый QTcpServer, а также средства для параллельных вычислений), что свидетельствует о том, что инструмент для задачи подходит.

Сложность реализации зависит от опыта разработчика. Для разработчика с большим опытом работы с Qt писать с помощью Qt будет проще, чем с помощью других средств. Для Java-разработчика — наоборот. Никакой чрезмерной сложности в Qt нет, это точно.
Ответ написан
bogolt
@bogolt
Qt не предназначен для серверов. Это отличная библиотека для десктопных приложений.

Если вы планируете взять Qt чтобы получить более удобное управление фукнциями для работы с сетью то вам стоит задуматься о boost.asio. Его асинхронный интерфейс куда более сложен, однако результат того стоит. Код получается очень быстрым и эффективным.

Позволю себе полюбопытствовать насчет сетевого протокола. Будет ли это голый TCP или нечто более продвинутое. Если вы еще не определились или уже выбрали TCP могу порекомендовать посмотреть на xmpp. Он просто прекрасен. Правда на си есть не так уж много библиотек реализующих его, впрочем libstrophe должно хватить.
Ответ написан
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Qt для серверов всё же не заточен.
В последнее время пишу сетевые сервисы на Go, писать удобно, всё есть, всё быстро, современно.
Ответ написан
Комментировать
qxfusion
@qxfusion
Qt это и есть С++ только с MOC
Ну сравните например с Minecraft — там сервер написан на Java (насколько Я помню) и все довольны :)
Ответ написан
kyberorg
@kyberorg
По производительности примерно одно и тоже, но Qt — после компиляции (MOC и GСС++) это машинный код. Java — это байт-код JVM.
Для запуска Qt, вроде будет нужна libqt, для Java — JRE.
библиотека java.net — очень мощный инструмент в прямых руках.
Ответ написан
Применять низкоуровневый язык, когда можно обойтись управляемым, на мой взгляд расточительство, по отношению к рабочему времени программиста. Один маааааленький забытый где-то мемори лик обеспечит вам много часов отладки. Используйте C# (mono) или Java.

Нагрузка 2000-2500 не такая уж запредельная. В крайнем случае сделаете кластер из n серверов. Это куда проще чем пытаться выиграть несколько процентов производительности используя низкоуровневый язык, при этом имея приличную вероятность сесть в лужу.

Во избежание холиваров:
Я не утверждаю, что любая программа на Java или C# работает также быстро как на C++. Я утверждаю что _хорошая_ программа на Java\C# работает ненамного дольше чем _хороший_ аналог на C++. Управляемые языки, так же как C++ имеют свои особенности, которые надо учитывать, и тогда производительность будет весьма приличной.
Ответ написан
sdevalex
@sdevalex
Если вы хорошо знаете Qt, то подводный камень только один — придется выложить денюжку при коммерческом использовании.
Ответ написан
namespace
@namespace
Разработчик C++/Python
Qt — это универсальный инструмент для разработки высокоуровневых программных продуктов любого масштаба. Что бы вам не говорили — не слушайте их.

Кьют прекрасен тем, что это обычный С++ с разными классными вещами, такими как signal&slot или qmetaobject. Почти для всех вещей там есть различные обертки. Например для std::map есть QMap. Есть куча силенная разного полезного функционала.

К тому же, Qt построен таким образом, что в итоге получается максимально низкоуровневый байт-код для заданной платформы.

Удачи :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы