2012-01-26 2 views
2

Мне нужно разработать игровой сервер, который будет запускаться периодически (например, срабатывает CRON-работа каждые пять минут или час, если необходимо). После запуска сервер будет получать доступ ко всему текущему состоянию игры (выбирается через REST с серверов данных игры (Stackmob, Parse или аналогичный), выполняет обработку действий игрока и затем возвращает результаты на сервер данных. другими словами, он будет делать много HTTP запросов, но не само по себе обязательно должен быть веб-сервис.Какую серверную платформу выбрать для периодической работы автономной (Java) программы?

Я рассматривал несколько путей развития этого.

  • Я не чувствую для настройки сервера самостоятельно, поэтому мне нужно найти службу для запуска этого на этом, чтобы разрешить рабочий процесс, который я бы хотел.
  • Игровой движок Java, поэтому что-то, что работает аккуратно с этим.
  • Нужны файлы данных GET и POST, поэтому необходим доступ к статическим файлам.

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

    Google App Engine, например, потребовал бы, чтобы я реализовал это с использованием бэкэндов (поскольку игровой сервер мог работать более 60 секунд), и он не очень доволен идеей статических файлов.
  • Amazon EC2, по-видимому, легче разрабатывать (опять же, создавая интерфейс веб-службы, конечно), но, похоже, относительно низкая поддержка CRON.

Вообще говоря, мне кажется, что я хочу застрелить некоторых воробьев с рогаткой, но все службы предлагают мне пушки. Существуют ли какие-либо альтернативные платформы/рамки за пределами упомянутых выше двух больших, которые были бы подходящими для чего-то подобного?

+1

Ваши требования не ясны. По соображениям производительности ваш сервер должен быть очень близок к вашему игровому серверу (тот же компьютер или же локальная сеть). Поэтому непонятно, почему вы говорите о облачных сервисах и что не так с unix cron? –

+0

Unix cron в порядке, за исключением того, что вам нужен сервер UNIX для его запуска. Мне не очень интересно работать и поддерживать собственный сервер для чего-то подобного. –

+1

По производительности сервер бэкэнд работает асинхронно с данными игры, поэтому быть очень близким не является требованием. Практически игровой сервер обеспечивает доступ к мобильным устройствам, поэтому использование чего-то типа Stackmob и др. Для этого - гораздо более легкое решение, чем переключение одного из моих собственных. –

ответ

1

Вы можете попробовать Heroku. Они поддерживают Java. Если вы создали проект, который использовал single worker dyno, то хостинг был бы бесплатным (см. Ссылку).

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

Edit:

Вот некоторые ссылки, которые могут помочь начать работу:

0

Я нашел отличный способ написать что-то подобное в Groovy с Maven. Вы можете написать многопоточный скрипт Groovy, чтобы вытащить статистику, сделать обновления и т. Д., А затем подключить плагин maven к сбору всего в автономный исполняемый файл jar, который может быть вызван заданием CRON. Одна хорошая вещь о Groovy является то, что его синтаксис позволяет это сделать:

def google = "http://google.com".toURL().text 

которая превратит строку в URL и обрабатывать все детали превращения URL в HttpURLConnection и получить необработанный текст.

0

Сначала вы можете разработать приложение как отдельную программу Java, а затем беспокоиться о том, куда его развернуть позже.

Чтобы разработать приложение, вы можете написать простую программу Java, которая использует HtmlUnit для общения с внешними веб-службами. Работу можно было запустить с помощью Quartz. Если вы действительно хотели запустить работу извне через CRON, вы могли бы запустить CRON приложение, передав в args. Затем приложение запустится и выйдет.

В качестве альтернативы, вы всегда можете запустить приложение и запустить cron скрипт bash, который каким-то образом запускает задание.

По существу, все, что вам нужно развернуть, это машина Unix, чтобы вы могли использовать AWS.

1

Как насчет использования EC2, но вместо того, чтобы помещать планировщик в экземпляр (который не будет работать, потому что экземпляр может уйти в любое время), поместив его в AWS? Как этот парень:

http://alestic.com/2011/11/ec2-schedule-instance

В качестве альтернативы, если вы управляете вашим экземплярам EC2 через Ylastic, это выглядит еще проще:

http://blog.ylastic.com/scheduling-tasks-on-the-aws-cloud

Хотя вы должны платить за Ylastic, а также EC2, я думаю.

Смежные вопросы