Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Реалтайм онлайн игра. Выбор технологии, реализацие и т.д. (общие вопросы) (http://www.flasher.ru/forum/showthread.php?t=121293)

AlexStukoff 12.02.2009 13:38

Реалтайм онлайн игра. Выбор технологии, реализацие и т.д. (общие вопросы)
 
Привет всем.
Задача - сделать онлайн реалтайм игру. Динамичную. Предположим это будет аэрохокей (надеюсь все знают что это такое :) ) или что-нить подобного рода. Пока я разбираюсь с red5 (надо для видеоконференции) заказчик попросил добавить вот такую игру.
Возможно ли на red5 -ом реализовать такой вот непрерывный обмен данными?
Если использовать стандартные nc.call() и ответы сервера, то время реакции неприемлемо мало. Видимо это должен быть один, непрерывный поток данных... если кто-то что-то про это знает подскажите плиз в каком направлении копать.
И возможно ли сделать это на red5 в приницпе.
Заранее спасибо.

DarkLight 12.02.2009 13:46

Цитата:

Если использовать стандартные nc.call() и ответы сервера, то время реакции неприемлемо мало. Видимо это должен быть один, непрерывный поток данных...
гм. цифровые данные всегда разбиты на пакеты. nc.call на настоящем rtmp (который не поверх http) выполянется довольно шустро.
Что Вы собираетесь передавать потоком? На сервер передаются, например, действия пользователя, и затем отображаются с некоторой латентностью. Для сокрытия этого факта используются визуальные эффекты. Пример: отбивающий - робот, который перед передвижением включает реактивный двигатель, что происходит не моментально.
На red5 это в принципе реализуемо, но на мой взгляд, лучше разделить. Тем более, что при работе параллельно с видео латентности возрастут.

AlexStukoff 12.02.2009 13:56

Спасибо за быстрый ответ.
В принципе реализуемо на red5 это через call на настоящем rtmp? Что значит настоящий, а не поверх http? у меня никакого http нет, обращаюсь к серверу я с указанием протокола
Код:

nc.connect("rtmp://192.168.9.6/test");
Ладно, если робот,двигатели и все такое. А если это МорталКомбат? :(

Что значит разделить? альтернативы?

P.S.: как видите я нахожусь в информационном вакууме. Увы.

DarkLight 12.02.2009 14:30

Цитата:

Что значит настоящий, а не поверх http?
есть еще rtmpt, с туннелингом поверх http, предназначенный для работы на компьютерах, где закрыты порты, используемые rtmp

Морталкомбат - да еще проще. Инерция при движении и размах при ударе.

Разделить - имею ввиду отдельный игровой сервер. видеочат прилично грузит серверное железо, в идеале вообще на отдельном сервере игры. А сервер написать на бинарных сокетах, на java например. Или на любом другом языке. Я, например, сейчас пишу сервер для многопользовательской игры на haXe/neko

AlexStukoff 12.02.2009 14:54

Круто :) Это я про сервер.
Если это не часть nowhow сервера то не поделитесь ли опытом, как вы организуете обмен данными в рамках рассматриваемого вопроса? Главным образом - верна ли идеология организации взаимодействия именно таким способом:

Клиент А - дернул через call метод на сервере и в параметрах передал некие данные.
Сервер - вызвал метод на стороне клиента и передал эти данные Клиенту Б
Клиент Б - получил данные и сделал с ними чо нужно.

TERRORist 12.02.2009 20:14

Сложите пинги и поймете почему у вас ничего не получится.

Котяра 12.02.2009 22:24

Цитата:

Сообщение от AlexStukoff (Сообщение 797821)
Клиент А - дернул через call метод на сервере и в параметрах передал некие данные.
Сервер - вызвал метод на стороне клиента и передал эти данные Клиенту Б
Клиент Б - получил данные и сделал с ними чо нужно.

Глупости какие-то..
надо:
клиент А сообщил серверу о изменении своих данных.
сервер это понял. (записал в базу либо обработал в демоне)
дальше 2 пути:
- сокеты.при изменении данных модели рассылается сообщение подписанным слушателям (клиент а, клиент б.. итп)
- запросы. при запросе актуальной инфы она выдается.

BlooDHounD 13.02.2009 03:53

Котяра, а что в цитате не так?

AlexStukoff 13.02.2009 12:30

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);
Как объем данных меньше и как быстрее? Кто что знает на эту тему?
ИМХО - проще чем пульнуть строку уже не придумаешь...

wvxvw 13.02.2009 18:21

Быстрее - IExternalizable и придумывать свой алгоритм сжатия / записи... если сильно напрячься, то иногда можно в десятки раз сократить объем данных.
Т.е. пример, первым байтом высылаем все булевые значения, следующий байт делим для всяких целочисленных значений в сумме не превышающих 256 ну и т.д. Соответственно, слать как можно меньше строк, ну и т.п...


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

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