![]() |
|
||||||||||
|
|||||
|
Проектирование мультиплеера
Здравствуйте. Прошу заранее прощение за длинный пост, да будут милостивы модераторы. Думаю что тема сама по себе интерересна и такие проблемы проектирования и возникают, и решаются. В данный момент работаю над созданием мультиплеерной игры, с флэш интерфейсом. Возникают проблемы. Но со всем по порядку. Во-первых передача данных, естественно, 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 среде. |
|
|||||
|
Регистрация: Dec 2006
Сообщений: 17
|
делаем игру - мультиплеер через инет. По пункту 3 не могу ничего сказать. Так и делаем. И не получается там много соединений. Просто можно попробовать. Только там не полностью движок flash. Создается игра с обычной страницы - вылезает попап окно и погнали. Серверу посылается id игрока, номер игры, время подключения. Сервак синхронизирует с остальными - чтобы не началась игра без кого-то, дается отсчет и вперед.
Нет дочерних флэшек, есть одна, в которую собственно и посылаются данные, карта генерируется через php+xml. |
|
|||||
|
Banned
Регистрация: Sep 2001
Сообщений: 6,162
|
Цитата:
делаю так: один порт на сервере даю каждому клиенту ID и RoomID RoomID который клиент может поменять сам соответственно пакет идёт или только клиенту или boroadcast на всех с одинаковым RoomID я сейчас доделываю логику сохранения переменных итд ... тогда посмотрим как будет работать и как быстро |
|
|||||
|
Banned
Регистрация: Sep 2001
Сообщений: 6,162
|
Цитата:
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|