Untitled001
30.05.2006, 02:08
Проектирование мультиплеера
Здравствуйте.
Прошу заранее прощение за длинный пост, да будут милостивы модераторы. Думаю что тема сама по себе интерересна и такие проблемы проектирования и возникают, и решаются.
В данный момент работаю над созданием мультиплеерной игры, с флэш интерфейсом. Возникают проблемы. Но со всем по порядку.
Во-первых передача данных, естественно, XML. Планируется обмен разными структурами, тем более так легче добавить новые пакеты данных или поля.
Во вторых, встал вопрос выбора между гонением XML туда-сюда по таймауту в секунду, 2 или более (назовем это XML.sendAndLoad()), и XML сокетом. С сокетами раньше работал (не флэш) как на клиентах так и на серверах. Из того, что я знаю про XML и XML-сокеты во флеше, сделал такие выводы:
Плюсы XML.sendAndLoad:
* процесс коммуникации более чем знаком и похож на обработку запросов на обычном сайте, аналогия - GET/POST запрос, получаем HTML. Тут в принципе то же самое. Залогинился, получил ID сессии, и гоняй его в любых окнах браузера с запросом или по Cookies. Тем более для каждого действия можно сделать XML запрос на разные файлы.
* Мне кажется, что сам процесс запрос-ответ более надежный. Т.е. имея например XML.sendAndLoad по таймеру для чата, другой XML.sendAndLoad для посылки/получения массива с данными о действиях игрока (напр. ход в игре). Если соединение чуть порвется, но восстановится через несколько секунд или даже минут - таймер все таки дождется своей очереди (пока не кончился таймаут на сервере). А вот у сокета если порвал соединение - будь добр переподключиться, да перелогиниться, да восстановить состояние игры и прочая и прочая.
Зато сокет, конечно, выигрывает по скорости реакции за счет постоянного соединения клиент-сервер, и сообщения чата проходят максимально быстро а не по таймауту.
При правильном проектировании структуры данных, сокет, конечно, оставляет простой XML далеко в лесу нервно покуривать. Как я себе представляю, то если весь процесс авторизации+чат+настройки игры+игру засунуть в 1 флешку - проблем вроде бы никаких. Но проблема в следующем:
Сайт. Страница с логином - попадаем в аккаунт.
Страница с чатом и списком игр. А диалог входа в игру и сама игра с приватным чатом - в отдельном окне. Для того, чтобы можно было одновременно открыть несколько игр.
В чем загвоздка.
Если испоьзовать XML.send... Всё ок. Но хочется использовать мощщ сокетов.
Как быть с ними? Итак главные вопросы поста:
1) Стоит ли делать для каждой задачи свой сокет-процесс на сервере (логин, чат, игра - уже 3 ) или всё пихать в один?
2) Как быть с запросами из разных флешек? Практикуется ли коммуникация между например главным флэш окном, у которого коннект на сокет и дочерними через LocalConnection?
3) Если делать один сокет/порт, на который коннектиться из каждого поп-апа, то выходит что в пуле соединений сервера на 1 реального юзера получается несколько соединений, белиберда выйдет, да и пул распухнет.
4) Если делать разные сервер-сокеты под разные задачи под разными портами, то клиентов достанет открывать/разрешать коннект на каждый прот в фаерволлах (при наличии)...
5) Или все таки все пихать в одо флешевское окно? (ну ну, и мультиоконный интерфейс внутри городить... жэсть)
Если есть люди имеющие опыт или соображения хоть по некоторым пунктам - прошу высказаться. Приветствую так же ссылки на инфо о проектировании (не туториалы как соединиться с сокетом) мультиплееров на флеше в Web среде.
Здравствуйте.
Прошу заранее прощение за длинный пост, да будут милостивы модераторы. Думаю что тема сама по себе интерересна и такие проблемы проектирования и возникают, и решаются.
В данный момент работаю над созданием мультиплеерной игры, с флэш интерфейсом. Возникают проблемы. Но со всем по порядку.
Во-первых передача данных, естественно, XML. Планируется обмен разными структурами, тем более так легче добавить новые пакеты данных или поля.
Во вторых, встал вопрос выбора между гонением XML туда-сюда по таймауту в секунду, 2 или более (назовем это XML.sendAndLoad()), и XML сокетом. С сокетами раньше работал (не флэш) как на клиентах так и на серверах. Из того, что я знаю про XML и XML-сокеты во флеше, сделал такие выводы:
Плюсы XML.sendAndLoad:
* процесс коммуникации более чем знаком и похож на обработку запросов на обычном сайте, аналогия - GET/POST запрос, получаем HTML. Тут в принципе то же самое. Залогинился, получил ID сессии, и гоняй его в любых окнах браузера с запросом или по Cookies. Тем более для каждого действия можно сделать XML запрос на разные файлы.
* Мне кажется, что сам процесс запрос-ответ более надежный. Т.е. имея например XML.sendAndLoad по таймеру для чата, другой XML.sendAndLoad для посылки/получения массива с данными о действиях игрока (напр. ход в игре). Если соединение чуть порвется, но восстановится через несколько секунд или даже минут - таймер все таки дождется своей очереди (пока не кончился таймаут на сервере). А вот у сокета если порвал соединение - будь добр переподключиться, да перелогиниться, да восстановить состояние игры и прочая и прочая.
Зато сокет, конечно, выигрывает по скорости реакции за счет постоянного соединения клиент-сервер, и сообщения чата проходят максимально быстро а не по таймауту.
При правильном проектировании структуры данных, сокет, конечно, оставляет простой XML далеко в лесу нервно покуривать. Как я себе представляю, то если весь процесс авторизации+чат+настройки игры+игру засунуть в 1 флешку - проблем вроде бы никаких. Но проблема в следующем:
Сайт. Страница с логином - попадаем в аккаунт.
Страница с чатом и списком игр. А диалог входа в игру и сама игра с приватным чатом - в отдельном окне. Для того, чтобы можно было одновременно открыть несколько игр.
В чем загвоздка.
Если испоьзовать XML.send... Всё ок. Но хочется использовать мощщ сокетов.
Как быть с ними? Итак главные вопросы поста:
1) Стоит ли делать для каждой задачи свой сокет-процесс на сервере (логин, чат, игра - уже 3 ) или всё пихать в один?
2) Как быть с запросами из разных флешек? Практикуется ли коммуникация между например главным флэш окном, у которого коннект на сокет и дочерними через LocalConnection?
3) Если делать один сокет/порт, на который коннектиться из каждого поп-апа, то выходит что в пуле соединений сервера на 1 реального юзера получается несколько соединений, белиберда выйдет, да и пул распухнет.
4) Если делать разные сервер-сокеты под разные задачи под разными портами, то клиентов достанет открывать/разрешать коннект на каждый прот в фаерволлах (при наличии)...
5) Или все таки все пихать в одо флешевское окно? (ну ну, и мультиоконный интерфейс внутри городить... жэсть)
Если есть люди имеющие опыт или соображения хоть по некоторым пунктам - прошу высказаться. Приветствую так же ссылки на инфо о проектировании (не туториалы как соединиться с сокетом) мультиплееров на флеше в Web среде.