Я создаю прототип механизма уведомлений в реальном времени с использованием http через порт 80. Цель проекта - позволить приложению Flash быстро реагировать на событие на удаленном сервере (в частности, на входящий телефонный звонок, подключенный к телефону рядом с компьютером. .) Опрос - это один из подходов, но он слишком медленный. В настоящее время я использую соединение через сокет, чтобы получать уведомления о событиях на сервере с малой задержкой, что работает хорошо, но не поддерживает брандмауэр. Я не хочу ничего устанавливать на клиент, кроме Flash или Silverlight. Перекрестная совместимость браузеров не является проблемой - в этом приложении я могу указать, какой браузер использует клиент, но предпочтительнее IE.
Я сделал сервер HttpHandler в .NET, который никогда не закрывает соединение и отправляет «события» клиенту, записывая байты в поток ответов http (ConnectedClientContext.Response.OutputStream.Write и т. д.), И у меня есть клиент .NET. приложение, которое может читать эти сообщения нормально.
Мой вопрос:
Могу ли я получать байты с сервера по HTTP по мере их поступления с использованием JavaScript, Flash или Silverlight? Пока я могу найти только способ получать уведомления о «прогрессе загрузки» и не получать фактические байты, пока ответ не будет закрыт - я хочу, чтобы они приходили по мере их поступления.
Наилучшие пожелания,
Даниэль



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не знаю о Flash, но в Javascript (что вы имеете в виду в браузере) и Silverlight вы в значительной степени ограничены протоколом http.
Вы можете использовать Шаблон потоковой передачи AJAX Http. Основные идеи, которые отличаются от того, что вы пытаетесь сделать, заключаются в том, что как только данные становятся доступными, невыполненный запрос заканчивается и сразу же запускается новый асинхронно, то есть пока ваш клиент обрабатывает вновь поступившие данные.
Silverlight предоставляет вам больше возможностей, поскольку стек HTTP является чисто асинхронным, но вы можете получить поток к вам, как только данные начнут поступать, установив для HttpWebRequest.AllowReadStreamBuffering значение false. (В отличие от XmlHttpRequest, который всегда буферизируется).
Flex и Flash имеют несколько доступных библиотек удаленного взаимодействия AMF / XML, которые поддерживают передачу данных. Я бы обязательно посмотрел на это.
http://raghuonflex.wordpress.com/2008/04/17/data-push-in-flex-with-backend/
Эти библиотеки используют реализацию, подобную Комета -, для достижения этой цели.
Идеи Comet для уведомлений использовать очень просто. вам даже не нужно использовать специфичную для комет структуру. просто выполните запрос ajax с обратным вызовом при ответе, оберните его в цикл, и у вас будет цикл событий, как в приложении с графическим интерфейсом. на стороне сервера не утруждайтесь ответом на запрос, пока не произойдет событие или тайм-аут (который является просто «нулевым» событием).