Серверное программирование - Простая многопользовательская игра - Какой протокол и технологии?

У меня есть опыт работы с кодом на год, но ни один сервер не работает. Я хочу немного сдержать вопрос, чтобы упростить то, что я пытаюсь достичь.

Я хочу написать код сервера, чтобы два клиента (браузер или iPhone/Android) могли подключаться, когда два игрока подключены, они видят отсчет таймера до нуля. Часы будут синхронизироваться на сервере, и клиенты будут уникально идентифицироваться.

Проблема со словом connect, что люди используют для многопользовательских игр? Открыть TCP-сокет для двухсторонней связи? Вы можете сказать, что я не совсем уверен, о чем говорю. Я надеялся использовать AppEngine, но я не уверен, подходит ли он для этого запроса.

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

Спасибо,

Гав

Ответ 1

Я предлагаю рассматривать настольные и мобильные системы как равные клиенты. Какие существуют варианты?

  • Вы пишете сервер сокетов, который будет принимать подключения от клиентов. Но тогда вам также нужно написать некоторый сокет-клиент, даже 2x - для рабочего стола и для мобильной ОС. И пользователю придется установить этот клиент.

  • Вы запускаете веб-сервер (независимо от того, какая технология вам нравится). Он будет предоставлять некоторые веб-службы, которые будут одинаково доступны как для настольных, так и для клиентских ОС. Но все же вам нужно написать клиентское приложение (снова 2x).

  • Вы запускаете веб-сервер и получаете доступ ко всем функциям через стандартный HTTP-протокол. Таким образом, вам даже не нужен клиент - почти на каждом рабочем столе или на мобильной ОС установлен хотя бы какой-либо веб-браузер. JavaScript предоставит динамические обновления вашего тикера.

Ответ 3

Я ни в коем случае не специалист по сетевому общению, но если вы не возражаете потерять несколько пакетов (или проверку ошибок в программном обеспечении), и вам нужно быструю и бережную связь, вы можете использовать UDP. Я думаю, что большинство программ для передачи данных и потоковых медиа используют этот протокол, чтобы избежать задержек и уменьшить размер пакета.

Ответ 4

Я несколько лет назад реализовал приложение Client/Server с помощью java и ServerSocket (http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html). У вас также есть версия SSL.

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

http://www.developer.com/java/ent/article.php/1356891/A-PatternFramework-for-ClientServer-Programming-in-Java.htm

Если вы обнаружите эту небольшую структуру:

http://www.bablokb.de/jcs/jcs.html

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

Ответ 5

Вы правы, что модель J2EE ломается с требованиями, близкими к реальным или многопользовательским. Вы migth хотите рассмотреть проект сервера RedDwarf. Он делает для игр то, что Servlets делает для логики busienss и является открытым исходным кодом.

http://www.reddwarfserver.org

Я предлагаю рассматривать настольные и мобильные системы как равные клиенты. Какие варианты тогда?

RedDwarf имеет подключаемый уровень трафика и может поддерживать любой желаемый клиент.

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

Если это не так, вам нужно что-то немного более технологичное.

О, и для чего стоит, если вы хотите писать сервер с нуля, НЕ используйте "ServerSocket". Это обеспечивает поток для каждого соединения и никогда не будет масштабироваться. Используйте NIO или используйте NIO framewoprk как Netty.