Краткое описание:
У нас есть законченная флеш-игра, похожая на Tetris, которая готова быть «подключенной» для многопользовательской игры. Проведя некоторые исследования и спросив здесь: Флэш-сокеты, возможности Peer-to-Peer , мы пришли к выводу, что работа с сетями P2P, выполняемая так, как игры для xbox / ps3 обрабатывают онлайн-игры, невозможна без дорогостоящих / сомнительные Adobe Software / Services (FMS / Cirrus) на платформе флэш-памяти на данный момент. По сути, Flash-клиент не может стать «хостом», прослушивающим сокеты без протокола RTMFP.
Вопрос, который нуждается в предложениях:
Исходя из этого, возникает вопрос: как лучше всего реализовать сетевую инфраструктуру для такой игры, как Tetris, у которой довольно маленький ввод-вывод, передаваемый от пользователя к пользователю (скажем, максимум 4 игрока одновременно). Учитывая, что мы не можем назначить одного игрока в качестве стиля p2p хоста, наши варианты:
1.) Fat Server с игровой логикой, Light Clients обновляют отображение / интерполяцию на основе обновлений сервера (Ala Quake)
2.) Сервер Light управляет связью между Fat Clients (Ala Параллельное моделирование, такое как игры RTS)
Проблема в том, что мы неопытны, когда речь заходит о сетевых играх, и поэтому очень хотели бы получить совет по поводу плюсов и минусов этих решений (или даже других решений). Наша игра «Тетрис» не так тривиальна, как отправка «атакующих линий», когда клиент очищает линии, чтобы добавить других игроков, сражающихся в данный момент. Нам нужно немного больше синхронизации в реальном времени, чем это. Например, список следующих тетримино - это единый общий источник, где все «борются» за желаемые кусочки.
Наконец, в зависимости от выбранной реализации, мне интересно, есть ли у кого-нибудь опыт работы с Node.js на игровых серверах. Я бы предположил, что если бы сервер был легковесным сервером, который обрабатывал только передачу данных между клиентами, то Node был бы идеальным решением. Однако, если бы игровая логика была размещена на сервере node.js, я бы предположил, что блокирующий характер вычислений сделает избыточным однонитевой неблокирующий подход ввода-вывода Node.js? Во всяком случае, любые советы по этому вопросу очень ценятся.