PDA

Просмотр полной версии : Непрерывное соединение: server-side = Comet, Red5 или что?


dimgel
29.01.2008, 07:11
Всем привет! :)

Профи, подскажите пожалуйста, как организовать непрерывно открытое соединение с Java-сервером? Я нарыл флеш-сайт livegames.ru (http://www.livegames.ru), который делает именно то, что мне нужно: гоняет данные туда и обратно через одно единственное непрерывно открытое соединение, без заголовков, и причём через порт 80! Как он это делает, ума не приложу. :umnik2:

Стандартная реализация Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29) на Jetty (http://www.mortbay.org/), которую мне советовали, заточена под Ajax. Она обеспечивает непрерывный поток данных только от сервера клиенту, но клиент при этом вынужден отдавать полноценные запросы, с HTTP заголовками, естественно через отдельное TCP-соединение.

Начал было ковыряться в Red5, но похоже это вообще не то, что мне нужно.

Please Help!

etc
29.01.2008, 10:51
гоняет данные туда и обратно через одно единственное непрерывно открытое соединение, без заголовков, и причём через порт 80! Как он это делает, ума не приложу. :umnik2:
И что в этом загадочного? Обычный сокет по 80-ому порту. Или вы думаете, что 80-ый порт обязательно HTTP?

dimgel
29.01.2008, 20:53
Ну может и ничего загадочного, но при этом эта дрянь ухитряется выполнять обычные HTTP-запросы на этот же порт. Вывод: либо у них полностью самописный HTTP-сервер, либо они как-то очень хитро использовали существующий. Вот и хотелось бы знать, как именно.

TERRORist
29.01.2008, 21:57
+1
тож хочу узнать. полезно

etc
29.01.2008, 22:53
С чего вы взяли, что запросы идут именно на тот же домен, на котором игра? Проверять я не проверял, но не вижу смысла в извращениях подобного рода.

IDVsbruck
03.02.2008, 19:41
Занятный сайт. Особенно ввиду того, что разрабатываем нечно похожее, но флешки разные и подгружаются.

Декомпилировал флешки, оставленные в кеше после посещения этого сайта. Что интересно, мы перепробовали несколько вариантов взаимодействия с серваком (сокеты, флекс), но остановились на том, который сейчас работает: POST-запрос от клиента, обработка сервером и возврат ответа в виде xml-структуры, которая парсится и которая достаточно универсально понимается при любом виде запросов.
Так вот, на данном сайте используется точно такая же структура - отправка запроса и получение xml. Это, кстати, решает все поставленные в данном топике вопросы: и про порты, и про непрерывность, и про мультигейминг.

MyXus
05.02.2008, 13:48
только про нагрузку не решает -)

IDVsbruck
05.02.2008, 20:10
Почему? С чего такие выводы?

7thsky™
12.02.2008, 04:10
Есть еще реализация comet'а - http://www.lightstreamer.com/ - там даже библиотеки под флэш (ас1, ас2, ас3) есть.

dimgel
18.02.2008, 01:32
Всем спасибо, итоги здесь (http://gzip.rsdn.ru/forum/?mid=2840130) (сорри за кросс-пост на другой форум, лениво копировать и заново форматировать).

Ключевые слова для поиска: Comet, Jetty, Continuations, Tomcat, CometProcessor, CometEvent, Content-Encoding: chunked.

dimgel
18.02.2008, 01:33
P.S. 7thsky, спасибо за ссылку, но я к тому времени уже практически решил проблему. В другой раз гляну, как время будет.

IDVsbruck
18.02.2008, 13:56
event.setTimeout(xxx) служит для того, чтобы система знала, через сколько возвращать ответ, если не возникло события, по которому ответ должен уйти клиенту.
Другими словами, если от флешки нет "возбудителя" запросов, а на сервере - ответов, то при строке event.setTimeout(5000) флеш и сервер будут обмениваться пакетами каждые 5 секунд.