Развитие игровой вспышки
Текущее время: Вс сен 23, 2018 9:28 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Простая онлайн игра
СообщениеДобавлено: Ср мар 14, 2018 3:13 pm 
Не в сети

Зарегистрирован: Сб фев 27, 2016 12:42 pm
Сообщений: 121
Подскажите как происходит общение между двумя андроид клиентами через сервер. Начал изучать вопрос, пока не сложилось понимания. Как передавать параметры между ними. Через Post запросы, сокеты или ещё как. Может у кого есть примеры реализации или книги какие.


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Простая онлайн игра
СообщениеДобавлено: Ср мар 14, 2018 9:09 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4987
Откуда: Пока не знаю
Сайт: http://gamespoweredby.com/blog/
Если откинуть пиринговые сети, то делается так:
1) Создаешь сокет-сервер. Обычный шаред-сервер "под форум" тут не прокатит. Пишешь ПО серверное
2) Приложение подключается к сокет-серверу и общается с ним

Вот когда-то писал статью. Там есть текст "И напишем код для Adobe Air проекта под iOS и соберем нашу IPA" - я описывал как раз создание сокет-сервера. Правда UDP, но не суть.
http://flashgameblogs.ru/blog/developing/1378.html

Разница TCP и UDP большая. UDP не требует подтверждения, что пакет доставлен, а TCP работает через подтверждение (автоматом на уровне системы). TCP работает медленно, UDP быстро. Т.е. через UDP ты пушишь сообщения, которые не влияют на "достоверность" данных, а TCP используешь для тех данных, которые должны быть обязательно достоверными. Видел в играх, когда пушка стреляет в одну сторону, а танк "смотрит" в другую? Это потому, что стрельба идет через TCP, где 100% гарантия нужна, что "выстрел" был, а вот угол вращения башни заходит через UDP, который не роляет на "честность" в данном случае.

Т.е. TCP пакет уходит адресату и адресат присылает назад ответ, что пакет получен. Это реализовано операцинной системой, тебе это проверять не надо.
UDP просто шурует в одном направлении и все. Клиент не знает дошло оно или нет


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Простая онлайн игра
СообщениеДобавлено: Ср мар 14, 2018 9:21 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4987
Откуда: Пока не знаю
Сайт: http://gamespoweredby.com/blog/
Сокет-сервер можно поднять (для баловства) даже на самом Adobe AIR, запустить его на винде, проброс портов на роутере сделать (если у тебя статический IP у инета) и общаться со своей игрой и компом :) Либо же "в рамках своего WiFi/Lan" тогда вообще ничего пробрасывать не надо (это только для общения локально-мир)

Хотя я делал сервера на AIR для небольших проектов и без проблем до 50 одновременных сессий держало. Больше не проверял - небыло надобности. Но подсказывает что-то, то и AIR имеет ограничения только "системные". Число максимальных подключение на компе зависит от объема памяти напрямую (так я читал про MS Windows Server давно.. Что-то примерно под 4000 на каждый 512 мегабайт ОЗУ).

Можешь на чем угодно сервер писать - без разницы. Общение идет напрямую по портам. Можешь на Java/C#/C++ и даже JavaScript на NodeJS сервер написать и к нему обращаться со своего AIR приложения.

Пример простой игры "крестики нолики":

1) Сокет-сервер запускается с привязкой к IP тачки, где запущен, на нем "открывается" прослушивание входящих сообщений
2) Как только входящее зарегистрировано - запоминаем его в переменную
3) Обязательно слушаем все ошибки и события. Если клиент отключился - ты удаляешь его из пула подключенных клиентов. Иногда бывает так, что отваливается игрок, а сервер всё еще думает, что ты подключен. Такое чаще всего возникает, если клиент отключился без разрыва подключения. Краш операционки, например. Реже - браузера. При краше браузера операционка скорее всего за тебя решит проблему закрытия порта. Но если у тебя отватился инет - тебе уже никто не скажет, что игрок отключился. Поэтому ты об этом узнаешь в результате попытки отправить данные или считать их.

4) Дальше все просто. Получение и отправку данных логически определяй в голове как "работа с файловой системой". Т.е. ты так же можешь туда "писать" и оттуда "читать". Не забывая только, что есть "буффер" и большие пакеты сразу не пролезут. Придется бить их на части.

5) Чел сделал "ход", инфа ушла на сервер. Сервер принял "ход" и тебе отправил, что ход был совершен. Ты у себя визуализируешь.
6) Ход делаешь ты - инфа идет на серв. Серв отправляет твоему оппоненту и он повторяет шаг 5, как ты делал.

7) Как искать с кем играть - назыается Лобби, комната и еще бог знает как. Ты создаешь комнату и кидаешь всем сообщение, что создана комната и даешь ей ID какой-либо.
8) Представим, что у тебя игра 1 на 1. Соотв. один игрок нажимает, что хочет зайти в игру. Его место бронируется по ID комнаты. Дальше другой тоже пытается зайти в этот же ID. Если комната по ID наполнена - всем рассылаешь сообщение, что игра сейчас начнется и начинаешь игру.

Дальше ходы 5-6, 5-6 )

Если тебе надо синхронить время с сервером - то грамотно делать так, чтоб не постоянно дергать время, а раз в Х секунд. Например 15:00 и ты берешь это время и от него считаешь. А раз в Х секунд ты берешь новое время с сервера.

А всякие POST/GET на простой сервер подходят для не realtime серверов ,а скорее для всяких там крестиков-ноликов, где не будут ежесекундно пушить данные.
Шахматы, чаты с обновлением в Х секунд, а не "как только отправлено сообщение".


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB