Архитектура для социальной многопользовательской браузерной игры (выбор серверной части + выбор интерфейса [flash / silverlight]) [закрыто]

StackOverflow https://stackoverflow.com/questions/638272

Вопрос

Я подумываю о разработке многопользовательской социальной онлайн-игры.Общее состояние мира потребовало бы чего-то быстрого в серверной части, поэтому потенциальные решения, по-видимому, следующие:

  1. быстрый игровой движок на сервере (например.c ++ ) и какой-нибудь язык интерфейса (php / python / ruby) + flash

  2. весь стек на python (с использованием twisted или stackless python) + flash

  3. .NET (asp.net или asp.net mvc) + flash

  4. .NET + silverlight

первый может быть излишеством с точки зрения производительности (3 разнородных слоя)

Nr .4 может быть раем программиста (общая среда на всех уровнях), но:

  • С Silverlight никогда не создавалось ничего подобного, может быть, за углом прячутся какие-нибудь шоу-стопперы
  • Возможно, будет трудно найти дизайнеров silverlight
  • Несмотря на то, что модель Flash movie / clip подвергается критике по сравнению с архитектурой SL full OO, разве это не преимущество, когда дело доходит до проектирования дополнительных частей виртуального мира внешними дизайнерами?Они могут просто подготовить .swf с помощью, например.4 ракурса предмета на 4 кадрах - разве это не было бы сложнее с SL?
  • Silvelight, по-видимому, не хватает некоторых игровых функций (например, обнаружения столкновений)

а ты как думаешь?

[РЕДАКТИРОВАТЬ] Сама игра была бы частью более крупного портала - следовательно, было бы неплохо интегрировать движок с каким-нибудь веб-фреймворком.

Это было полезно?

Решение

Вариант 2 - использование stackless Python - это то, что использует Eve Online.

http://support.eve-online.com/Pages/KB/Article.aspx?id=128


Редактировать

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

Однако учтите следующее.

  1. Статический контент (файлы .js, .css, .png и т.д.), Как правило, доминирует в пропускной способности вашей сети.Вам придется использовать обратный прокси-сервер (например, squid), чтобы справиться с этим.

  2. Кальмар должен откуда-то получать содержимое.Вам нужен облегченный файловый сервер, предоставляющий squid статический контент.Nginx или lighttpd или что-то в этом роде.Apache будет работать для этого, но - в какой-то степени - это может быть излишеством.

  3. Ваш динамический контент - как кажется - будет представлен в двух формах.

    • JSON для поддержки игры.

    • HTML для поддержки портала.

    Для этого вы были бы наиболее счастливы с движком mod_wsgi.Apache, безусловно, делает это;ngingnx и lighttpd также могут работать.

    • Ваш материал JSON должен состоять из одного набора URI.REST - это хороший шаблон дизайна.Через mod_wsgi они подключаются к игровому серверу, используя - при необходимости - stackless Python.У вашего интерфейса (например, Apache) есть местоположение, каталог или virtualhost для фильтрации этих URI и направления их демону mod_wsgi, который обслуживает игру.Посмотрите на Wekzeug чтобы построить это.

    • Ваш HTML-материал - это еще один набор URI.Через mod_wsgi они подключаются к серверу Django, работающему под управлением обычного Python.Ваш интерфейс (например, Apache) имеет местоположение, каталог или virtualhost для фильтрации этих URI и направления их демону mod_wsgi.

Другие советы

Я провел год, работая над многопользовательской онлайн-игрой, используя Silverlight для интерфейса и Python для бэкэнда (на самом деле я использовал IronPython в Silverlight, чтобы упростить разработку)

Silverlight очень хорошо подходит для этого, я бы не стал заниматься серьезной онлайн-игрой ни в чем другом.У него уже есть 35% рынка, к тому времени, когда вы закончите разработку, он должен быть достаточно высоким, чтобы больше не иметь большого значения.Для серьезных игр большинство людей действительно не будут возражать против установки плагина для браузера размером 4 МБ.Если вы просто хотите немного клонировать астероиды, используйте flash.

Если бы мне пришлось делать это заново, я думаю, я бы оставил Python для сервера, потому что это серверная технология, в которой я лучше всего разбираюсь, но я думаю, что я бы использовал C # во внешнем интерфейсе и использовал JSON для передачи данных.

Лучший совет, который я могу вам дать, это:

  1. Максимально используйте существующие библиотеки и код
  2. Не думайте о производительности преждевременно

Самое сложное - это закончить игру, использовать технологию, которую вы хорошо знаете, и оптимизировать с учетом вашего времени, а не кода.Надеюсь, ты сможешь сделать то, чего не смог я - закончить эту чертову игру :)

Редактировать

Относительно того, почему я бы использовал C #, если бы мне пришлось делать это заново:

У IronPython были свои преимущества и недостатки.Было здорово, что я мог обмениваться файлами кода (константами, моделями и т.д.) между сервером и клиентом.Внесение изменений и обновление браузера, чтобы увидеть, что это было потрясающе.Отладка была не такой дружественной, как C #.

Но в некотором смысле это гражданин второго сорта по сравнению с C #, привязка данных не сработала, и вы не можете использовать классы IronPython в xaml.Время загрузки было проблемой, поэтому я действительно потратил много усилий, чтобы настроить параллельный импорт в фоновых потоках, чтобы ускорить его.Из-за второго статуса гражданина, когда речь идет о xaml, я использовал язык шаблонов для генерации xaml, как если бы это был html, что на самом деле работало лучше, чем привязка данных, но ни один язык шаблонов python не работал в IronPython, поэтому я написал свой собственный (другой приемник времени).)

Чтобы включить совместное использование моделей, мне пришлось написать свой собственный ORM.Это было достаточно просто.Но для их передачи я перешел на JSON и вместо этого создал оптимизированный двоичный формат, который работал между IronPython и Python.Это был еще один провал во времени.

Оглядываясь назад, я не должен был отвлекаться на все эти кроличьи тропы.

Twisted был успешно использован для этой цели.Основанный на вызовах asynchronius, он очень эффективен для приложений, требующих постоянных подключений.Также он имеет хорошую реализацию RTMP для использования с flash.Проверьте chesspark, он построен с использованием Twisted:

http://www.chesspark.com/

К тому же игровой движок на самом деле не обязательно должен быть на c / c ++.Зависит от сложности и типа игры.Но есть также библиотека pygame, которая довольно хороша.

Лично я бы отговаривал вас от использования silverlight.Плагин flash гораздо лучше адаптирован и будет использоваться в обозримом будущем, особенно в операционных системах, отличных от ms.Не принимайте это близко к сердцу, но я бы не стал устанавливать silverlight только для того, чтобы посмотреть вашу игру.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top