![]() |
Реалтайм онлайн игра. Выбор технологии, реализацие и т.д. (общие вопросы)
Привет всем.
Задача - сделать онлайн реалтайм игру. Динамичную. Предположим это будет аэрохокей (надеюсь все знают что это такое :) ) или что-нить подобного рода. Пока я разбираюсь с red5 (надо для видеоконференции) заказчик попросил добавить вот такую игру. Возможно ли на red5 -ом реализовать такой вот непрерывный обмен данными? Если использовать стандартные nc.call() и ответы сервера, то время реакции неприемлемо мало. Видимо это должен быть один, непрерывный поток данных... если кто-то что-то про это знает подскажите плиз в каком направлении копать. И возможно ли сделать это на red5 в приницпе. Заранее спасибо. |
Цитата:
Что Вы собираетесь передавать потоком? На сервер передаются, например, действия пользователя, и затем отображаются с некоторой латентностью. Для сокрытия этого факта используются визуальные эффекты. Пример: отбивающий - робот, который перед передвижением включает реактивный двигатель, что происходит не моментально. На red5 это в принципе реализуемо, но на мой взгляд, лучше разделить. Тем более, что при работе параллельно с видео латентности возрастут. |
Спасибо за быстрый ответ.
В принципе реализуемо на red5 это через call на настоящем rtmp? Что значит настоящий, а не поверх http? у меня никакого http нет, обращаюсь к серверу я с указанием протокола Код:
nc.connect("rtmp://192.168.9.6/test");Что значит разделить? альтернативы? P.S.: как видите я нахожусь в информационном вакууме. Увы. |
Цитата:
Морталкомбат - да еще проще. Инерция при движении и размах при ударе. Разделить - имею ввиду отдельный игровой сервер. видеочат прилично грузит серверное железо, в идеале вообще на отдельном сервере игры. А сервер написать на бинарных сокетах, на java например. Или на любом другом языке. Я, например, сейчас пишу сервер для многопользовательской игры на haXe/neko |
Круто :) Это я про сервер.
Если это не часть nowhow сервера то не поделитесь ли опытом, как вы организуете обмен данными в рамках рассматриваемого вопроса? Главным образом - верна ли идеология организации взаимодействия именно таким способом: Клиент А - дернул через call метод на сервере и в параметрах передал некие данные. Сервер - вызвал метод на стороне клиента и передал эти данные Клиенту Б Клиент Б - получил данные и сделал с ними чо нужно. |
Сложите пинги и поймете почему у вас ничего не получится.
|
Цитата:
надо: клиент А сообщил серверу о изменении своих данных. сервер это понял. (записал в базу либо обработал в демоне) дальше 2 пути: - сокеты.при изменении данных модели рассылается сообщение подписанным слушателям (клиент а, клиент б.. итп) - запросы. при запросе актуальной инфы она выдается. |
Котяра, а что в цитате не так?
|
BlooDHounD
Вот кто знает всю правду об ЭТОМ :) :) :) К слову о пингах. Предположим у нас средний пинг 200ms. Так как в одной секунде 1000ms то обновлять данные быстрее чем 5 раз в секунду не получится. Грубо говоря реалтайм онлайн игра будет реагировать на действия пользователя со скоростью 5fps. И, в принципе, (вспоминая не браузерные онлайн игры) это приемлимо. Встает масса вопросов по обработке лагов, таймауты и пр., но это техника. Возвращаясь к теме: RED5 писан на яве, работает с бинарными сокетами а, следовательно, при выборе иного сокет-сервера ПРИНЦИПИАЛЬНО скорость не изменится. Такое вот мое ИМХО. Познакомился с таким протоколом(???) как RAW-данные. Их, например, использует SmartFox Server (офигенная кстати надстройка над RED5) для реализации высоконагруженных реалтайм игр. RAW-это просто все данные фигачим одной строкой с использованием сепаратора. По этой теме вопрос: Вариант А Я передаю данные по отдельности так сказать. Списком параметров. Код:
nc.call("server_myfunction",null,board_mc.lastX,board_mc.lastY,user.name,user.health,user.something);В качестве разделителя испоьзую символ "|" и передаю данные одной строкой. Код:
nc.call("server_myfunction",null,board_mc.lastX+"|"+board_mc.lastY+"|"+user.name+"|"+user.health+"|"+user.something);ИМХО - проще чем пульнуть строку уже не придумаешь... |
Быстрее - IExternalizable и придумывать свой алгоритм сжатия / записи... если сильно напрячься, то иногда можно в десятки раз сократить объем данных.
Т.е. пример, первым байтом высылаем все булевые значения, следующий байт делим для всяких целочисленных значений в сумме не превышающих 256 ну и т.д. Соответственно, слать как можно меньше строк, ну и т.п... |
| Часовой пояс GMT +4, время: 14:57. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.