Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.01.2009, 18:27
Juriy_84 вне форума Посмотреть профиль Отправить личное сообщение для Juriy_84 Найти все сообщения от Juriy_84
  № 1  
Ответить с цитированием
Juriy_84

Регистрация: Jan 2009
Сообщений: 5
По умолчанию Full duplex HTTP

Добрый день.

Сразу прошу прощения, если вопрос простой и очевидный, я не так давно занимаюсь ActionScript.

Как правильно реализовать Full Duplex HTTP подключение средствами ActionScript? Другими словами, нужно добиться, чтобы и клиент и сервер могли передавать сообщения без необходимости каждый раз инициировать подключение.
Я знаю, что такой эффект можно получить, используя Transfer-Encoding=Chunked либо установив 2 постоянных подключения к серваку. И то и другое требует некоторых "танцев с бубном", если кто-то делал подобные решения, подскажите, как лучше решить задачу.

Если интересно, зачем такое счастье надо: некоторые особо злостные прокси режут не-HTTP траффик. Хочу обойти это ограничение, сохранив время реакции как при TCP подключении.

Старый 19.01.2009, 19:21
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Флеш не умеет посылать нужные вам заголовки - так что варианты: вешать сокет на 80-й порт / пользоваться ФМС или аналогами.
__________________
Hell is the possibility of sanity

Старый 19.01.2009, 20:05
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 3  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
Есть реализации Cometа под АС3 - через URLStream

Старый 19.01.2009, 21:45
Juriy_84 вне форума Посмотреть профиль Отправить личное сообщение для Juriy_84 Найти все сообщения от Juriy_84
  № 4  
Ответить с цитированием
Juriy_84

Регистрация: Jan 2009
Сообщений: 5
А где на эту реализацию можно посмотреть? Уж очень интересно...

... Кажется, нашел нечто подобное. Нужно было гуглить не по ActionSctipt HTTP Duplex, а по ActionScript Comet. Спасибо!


Последний раз редактировалось Juriy_84; 19.01.2009 в 21:57.
Старый 19.01.2009, 21:49
TimID вне форума Посмотреть профиль Отправить личное сообщение для TimID Посетить домашнюю страницу TimID Найти все сообщения от TimID
  № 5  
Ответить с цитированием
TimID
[+1 18.01.09]
 
Аватар для TimID

Регистрация: Sep 2003
Адрес: Москва
Сообщений: 34
2J, я только что об этом распрашивал (в теме про постоянный канал подключения). Видимо, нужно писать собственный протокол.

Старый 20.01.2009, 00:32
Juriy_84 вне форума Посмотреть профиль Отправить личное сообщение для Juriy_84 Найти все сообщения от Juriy_84
  № 6  
Ответить с цитированием
Juriy_84

Регистрация: Jan 2009
Сообщений: 5
Я бегло прочел эту тему. Там, вроде, решения для моей задачи нет.

В Java-клиенте я делал так: создавал один запрос на сервер и оставлял его подключенным. Сервер заранее не сообщал content-length и посылал сообщения по мере надобности + keep-alive сообщения (чтобы слишком умные прокси не убивали подключение по таймауту). Получается, что сервер шлет "бесконечный" ответ.
Для сообщений от _клиента_ я каждый раз создавал новое подключение, из-за этого счастье от постоянного первого подключения сводилось на нет. Это half-duplex (или simplex, как больше нравится).
Для full duplex по такому принципу нужно по 2 постоянных подключения на каждого пользователя, это довольно дорого. Есть еще альтернативные способы (ломиться на порт 443 с запросом CONNECT) но это тоже танцы с бубном.

Насчет протокола... Поверх HTTP придумать протокол обмена сообщениями не проблема. Если траффик не критичен, я бы использовал JSON (или XML) если критичен, то нужно использовать какую-нибудь бинарную сериализацию. В своем проекте я написал небольшой движок для сериализации, основанный на аннотациях... В принципе, я им полностью доволен.
На крайняк и JSON и XML отлично сжимаются ZIP. Алгоритм сжатия/распаковки не слишком прожорлив, должно сработать.

Старый 20.01.2009, 22:12
TimID вне форума Посмотреть профиль Отправить личное сообщение для TimID Посетить домашнюю страницу TimID Найти все сообщения от TimID
  № 7  
Ответить с цитированием
TimID
[+1 18.01.09]
 
Аватар для TimID

Регистрация: Sep 2003
Адрес: Москва
Сообщений: 34
Это мысль, кстати, послать заголовок http запроса в content-length которого указать заведомо большое число - метр, к примеру. Потом keep-alive и слать по сто байт в секунду. Типа: "У нас медленный коннект" - модем плохой. Сервер - тоже в ту же игру может поиграть.
Это можно на неблокирующих (асинхронных) сокетах провернуть.

Беда в том, что промежуточные сервера могут буферизировать трафик. Равно как и сам flash. Обычно буфер около 8 кб. Как их всех "отучить" от подобной самодеятельности - вопрос.
Можно попробовать слать по 10 кб за раз. Но тогда трафик может быть большим.

Старый 20.01.2009, 22:46
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 8  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
TimID, 90% проксей ваще не держат кип-элив.

Старый 21.01.2009, 21:58
TimID вне форума Посмотреть профиль Отправить личное сообщение для TimID Посетить домашнюю страницу TimID Найти все сообщения от TimID
  № 9  
Ответить с цитированием
TimID
[+1 18.01.09]
 
Аватар для TimID

Регистрация: Sep 2003
Адрес: Москва
Сообщений: 34
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
TimID, 90% проксей ваще не держат кип-элив.
Значит остается 443 и CONNECT.
Или наладить 4-8 сокетов соединяться с сервером в "замедленном режиме" с небольшим перекрытием. Чтобы сеанс длился секунд 10-15 (более длительный waiting определенно режется проксями как зависший).
Скажем:
Два - пытаются соединиться
Третий отправляет заголовок
Четвертый - тело
Пятый - уже завершает
Шестой - "отдыхает" в пуле.
И т.д.


Последний раз редактировалось TimID; 21.01.2009 в 22:06.
Старый 22.01.2009, 00:58
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 10  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
TimID, удачи! расскажите, что получилось

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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