Могу ли я получить поток через HTTP с помощью JavaScript, Flash или Silverlight? - PullRequest
1 голос
/ 13 января 2009

Я создаю прототип механизма уведомлений в реальном времени, используя http через порт 80. Цель проекта - позволить приложению Flash быстро реагировать на событие на удаленном сервере (в частности, входящий телефонный звонок, подключенный к телефону, затем к компьютеру.) Опрос является одним из подходов, но он слишком медленный. В настоящее время я использую сокетное соединение для получения уведомлений о событиях на сервере с низкой задержкой, что хорошо работает, но не подходит для брандмауэров. Я не хочу устанавливать ничего, кроме Flash или Silverlight на клиенте. Кросс-совместимость браузеров не имеет значения - в этом приложении я могу указать, какой браузер использует клиент, но IE предпочтительнее.

Я создал сервер HttpHandler в .NET, который никогда не закрывает соединение и отправляет «события» клиенту, записывая байты в поток ответов http (ConnectedClientContext.Response.OutputStream.Write и т. Д.), И у меня есть Клиентское приложение .NET, которое может читать эти сообщения в порядке.

Мой вопрос:

Могу ли я получать байты с сервера по HTTP, когда они поступают с использованием JavaScript, Flash или Silverlight? Пока что я могу только найти способ получать уведомления о «прогрессе загрузки» и не получать фактические байты до тех пор, пока ответ не будет закрыт - я хочу, чтобы они поступали по мере их поступления.

С наилучшими пожеланиями,

Daniel

Ответы [ 3 ]

1 голос
/ 13 января 2009

очень легко использовать идеи кометы для уведомлений. вам даже не нужно использовать специфическую для кометы структуру. просто сделайте ajax-запрос с обратным вызовом при ответе, поместите его в цикл, и у вас будет цикл обработки событий, как в приложении с графическим интерфейсом на стороне сервера не удосуживайтесь отвечать на запрос, пока не будет ни событие, ни тайм-аут (который является просто нулевым событием).

1 голос
/ 13 января 2009

Я не знаю о Flash, но в Javascript (что вы подразумеваете под браузером) и Silverlight вы в значительной степени ограничены протоколом http.

Вы можете использовать AJAX Http Streaming pattern . Основная идея, которая отличается от того, что вы пытаетесь сделать, заключается в том, что как только данные становятся доступны, невыполненный запрос заканчивается, и новый немедленно инициируется асинхронно, то есть, пока ваш клиент обрабатывает вновь поступившие данные.

Silverlight предоставляет вам больше возможностей, поскольку стек HTTP является чисто асинхронным, но вы можете получить доступ к потоку, как только данные начнут поступать, установив HttpWebRequest.AllowReadStreamBuffering в false. (В отличие от XmlHttpRequest, который всегда буферизируется).

0 голосов
/ 13 января 2009

Flex и Flash имеют несколько доступных библиотек удаленного взаимодействия AMF / XML, которые поддерживают передачу данных. Я бы наверняка посмотрел на это.

http://raghuonflex.wordpress.com/2008/04/17/data-push-in-flex-with-backend/

Эти библиотеки используют реализацию Comet - , чтобы достичь этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...