Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.05.2006, 02:08
Untitled001 вне форума Посмотреть профиль Отправить личное сообщение для Untitled001 Найти все сообщения от Untitled001
  № 1  
Ответить с цитированием
Untitled001

Регистрация: May 2006
Сообщений: 6
Отправить сообщение для Untitled001 с помощью ICQ
По умолчанию Проектирование мультиплеера

Проектирование мультиплеера

Здравствуйте.

Прошу заранее прощение за длинный пост, да будут милостивы модераторы. Думаю что тема сама по себе интерересна и такие проблемы проектирования и возникают, и решаются.

В данный момент работаю над созданием мультиплеерной игры, с флэш интерфейсом. Возникают проблемы. Но со всем по порядку.

Во-первых передача данных, естественно, 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 среде.

Старый 21.12.2006, 20:04
3vc вне форума Посмотреть профиль Отправить личное сообщение для 3vc Найти все сообщения от 3vc
  № 2  
Ответить с цитированием
3vc

Регистрация: Dec 2006
Сообщений: 17
делаем игру - мультиплеер через инет. По пункту 3 не могу ничего сказать. Так и делаем. И не получается там много соединений. Просто можно попробовать. Только там не полностью движок flash. Создается игра с обычной страницы - вылезает попап окно и погнали. Серверу посылается id игрока, номер игры, время подключения. Сервак синхронизирует с остальными - чтобы не началась игра без кого-то, дается отсчет и вперед.
Нет дочерних флэшек, есть одна, в которую собственно и посылаются данные, карта генерируется через php+xml.

Старый 22.12.2006, 12:12
Artem Brigert вне форума Посмотреть профиль Найти все сообщения от Artem Brigert
  № 3  
Ответить с цитированием
Artem Brigert
Banned

Регистрация: Sep 2001
Сообщений: 6,162
Цитата:
Стоит ли делать для каждой задачи свой сокет-процесс на сервере
если ты емеешь ввиду thread то по желанию, я не делал


делаю так:

один порт
на сервере даю каждому клиенту ID и RoomID
RoomID который клиент может поменять сам

соответственно пакет идёт или только клиенту или boroadcast на всех с одинаковым RoomID

я сейчас доделываю логику сохранения переменных итд ... тогда посмотрим как будет работать и как быстро

Старый 22.12.2006, 12:13
Artem Brigert вне форума Посмотреть профиль Найти все сообщения от Artem Brigert
  № 4  
Ответить с цитированием
Artem Brigert
Banned

Регистрация: Sep 2001
Сообщений: 6,162
Цитата:
Серверу посылается id игрока, номер игры, время подключения.
а что тогда делает твой сервер?

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.