2009-10-21 3 views
3

Я работаю над проектом, где я хочу, чтобы пользователи могли как можно больше модифицировать и настраивать.Является ли Lua лучшим/самым быстрым выбором для игрового сервера?

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

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

Проблема с библиотеками (DLL) заключается в том, что кросс-платформенная совместимость является обязательной, поскольку она является своего рода игровым сервером и в основном предназначена для использования на выделенных серверах (часто Linux), но многие люди также будут используйте его на своей локальной машине (в основном Windows).

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

Являются ли мои сомнения разумными или будет Lua хорошим решением? Также вы можете думать о каком-либо лучшем/другом варианте для моей заботы?

Резюмируя важные аспекты:

  • кросс-платформенной совместимости
  • хорошую производительность (-> онлайн-игры)
  • плагины/скрипты, которые каждый может создавать до тех пор, как он/она знает о языке, это может быть Lua, C или любой
  • вариант для закрытых источников плагинов/скриптов (не так важно, но было бы хорошо :)

ответ

5

Боюсь, что единственный, кто может ответить, если Lua будет достаточно быстро для вас, это ... вы. Мы не знаем, что именно вы делаете и как вы его реализуете. Мое предложение - прототип и измерение. Напишите небольшую, но релевантную часть вашей системы как в Lua, так и в C/C++, измерьте производительность обоих и решите, достаточно ли Lua. Имея WoW в качестве примера, Lua кажется достаточно быстрым для клиентской/пользовательской части игры, но я ничего не могу сказать о сервере. Но, во всяком случае, я сомневаюсь, что там есть язык, который быстрее и легко встраивается по сравнению с Lua (отказ от ответственности: я не оценил работу Lua сам, особенно не против других подобных языков, поэтому возьмите это с помощью соли соли)

Вы упоминаете что-то о том, что библиотеки DLL не являются кросс-платформенными, поэтому просто FYI: если вы хотите использовать DLL для плагинов и загружать их динамически, такая же функциональность существует в Linux. «DLL» называются «разделяемыми библиотеками» или «общими объектами» и обычно проходят расширение .so. И вместо окон LoadLibrary, GetProcAddress и FreeLibrary, есть dlopen, dlsym и dlclose.

+0

Извините, был очень занят в прошлые дни. Спасибо за вашу помощь, я попробую LUA как можно скорее. Игра, на которую нацеливается мое серверное приложение, - Warcraft III. Многие люди ставят очень высокий приоритет на очень низкое время отклика на некоторых картах, например, 50-100 мс, поэтому я беспокоюсь о производительности. Моя проблема с динамическими библиотеками заключается в том, что я хочу предоставить какое-то управление пакетами с помощью репозиториев, подобных Linux. Но я сомневаюсь, что есть какая-то возможность предусмотреть какой-либо предварительно скомпилированный материал, который все еще кросс-платформенный. Возможно, должно было бы упомянуть об этом раньше, но .. Спасибо :) – Spoofy

2

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

+0

В зависимости от того, как модули связаны, GPL 2 также может не работать.Как правило, динамическое связывание не является «брандмауэром», которое не позволяет лицензии GPL применять другие модули. Вызов модуля как отдельного процесса обычно достаточен для предотвращения применения лицензии GPL на границе процесса. –

+0

Что относительно LGPL? – Lazarus

+0

Большое спасибо за быстрые ответы. Возможно, мое упоминание немного вводит в заблуждение, но моя проблема заключается не в том, какую лицензию использовать, но если LUA будет достаточно быстро выполнять приложение игрового сервера, где скорость очень важна. Или в случае, если это не будет, если кто-нибудь может подумать о хорошем варианте;) – Spoofy

1

Вы когда-нибудь думали о AngelScript? Я тоже мало знаю об этом, но, похоже, имеет синтаксис C++ и довольно гибкий и чрезвычайно кросс-платформенный.

+0

И в отличие от Lua, который использует C API для вставки C/C++ в него, он использует полностью OOP C++ API, если вы чувствуете себя более комфортно с ним. –