![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Привет всем.
Задача - сделать онлайн реалтайм игру. Динамичную. Предположим это будет аэрохокей (надеюсь все знают что это такое ) или что-нить подобного рода. Пока я разбираюсь с red5 (надо для видеоконференции) заказчик попросил добавить вот такую игру.Возможно ли на red5 -ом реализовать такой вот непрерывный обмен данными? Если использовать стандартные nc.call() и ответы сервера, то время реакции неприемлемо мало. Видимо это должен быть один, непрерывный поток данных... если кто-то что-то про это знает подскажите плиз в каком направлении копать. И возможно ли сделать это на red5 в приницпе. Заранее спасибо.
__________________
coming soon... |
|
|||||
|
ветеран форума
|
Цитата:
Что Вы собираетесь передавать потоком? На сервер передаются, например, действия пользователя, и затем отображаются с некоторой латентностью. Для сокрытия этого факта используются визуальные эффекты. Пример: отбивающий - робот, который перед передвижением включает реактивный двигатель, что происходит не моментально. На red5 это в принципе реализуемо, но на мой взгляд, лучше разделить. Тем более, что при работе параллельно с видео латентности возрастут.
__________________
4am is time to rock |
|
|||||
|
Спасибо за быстрый ответ.
В принципе реализуемо на red5 это через call на настоящем rtmp? Что значит настоящий, а не поверх http? у меня никакого http нет, обращаюсь к серверу я с указанием протокола Ладно, если робот,двигатели и все такое. А если это МорталКомбат? ![]() Что значит разделить? альтернативы? P.S.: как видите я нахожусь в информационном вакууме. Увы.
__________________
coming soon... |
|
|||||
|
ветеран форума
|
Цитата:
Морталкомбат - да еще проще. Инерция при движении и размах при ударе. Разделить - имею ввиду отдельный игровой сервер. видеочат прилично грузит серверное железо, в идеале вообще на отдельном сервере игры. А сервер написать на бинарных сокетах, на java например. Или на любом другом языке. Я, например, сейчас пишу сервер для многопользовательской игры на haXe/neko
__________________
4am is time to rock |
|
|||||
|
Круто
Это я про сервер.Если это не часть nowhow сервера то не поделитесь ли опытом, как вы организуете обмен данными в рамках рассматриваемого вопроса? Главным образом - верна ли идеология организации взаимодействия именно таким способом: Клиент А - дернул через call метод на сервере и в параметрах передал некие данные. Сервер - вызвал метод на стороне клиента и передал эти данные Клиенту Б Клиент Б - получил данные и сделал с ними чо нужно.
__________________
coming soon... |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
надо: клиент А сообщил серверу о изменении своих данных. сервер это понял. (записал в базу либо обработал в демоне) дальше 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);
ИМХО - проще чем пульнуть строку уже не придумаешь...
__________________
coming soon... |
|
|||||
|
Modus ponens
|
Быстрее - IExternalizable и придумывать свой алгоритм сжатия / записи... если сильно напрячься, то иногда можно в десятки раз сократить объем данных.
Т.е. пример, первым байтом высылаем все булевые значения, следующий байт делим для всяких целочисленных значений в сумме не превышающих 256 ну и т.д. Соответственно, слать как можно меньше строк, ну и т.п...
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:29. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| red5 , онлайн |
|
|