Развитие игровой вспышки
Текущее время: Чт апр 26, 2018 5:52 am

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




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

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


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

Зарегистрирован: Вс дек 19, 2010 5:31 pm
Сообщений: 4974
Откуда: Пока не знаю
Сайт: 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
Сообщений: 4974
Откуда: Пока не знаю
Сайт: 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 часа [ Летнее время ]


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

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


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

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