1

我正在通过端口 80 使用 http 对实时通知机制进行原型设计。该项目的目的是允许 Flash 应用程序快速响应远程服务器上的事件(特别是连接到计算机旁边的电话的呼入电话.) 轮询是一种方法,但太慢了。目前,我使用套接字连接来获取服务器上事件的低延迟通知,这很好用,但对防火墙不友好。我不想在客户端上安装除 Flash 或 Silverlight 之外的任何东西。浏览器的交叉兼容性不是问题——在这个应用程序中,我可以指定客户端使用的浏览器,但首选 IE。

我在 .NET 中创建了一个服务器 HttpHandler,它从不关闭连接并通过将字节写入 http 响应流(ConnectedClientContext.Response.OutputStream.Write 等)将“事件”发送到客户端,并且我有一个 .NET 客户端可以读取这些消息的应用程序没问题。

我的问题:

当字节到达使用 JavaScript、Flash 或 Silverlight 时,我可以通过 HTTP 接收来自服务器的字节吗?到目前为止,我只能找到一种方法来获得“下载进度”的通知,并且在响应关闭之前不获取实际字节 - 我想要它们到达时。

此致,

丹尼尔

4

3 回答 3

1

我不了解 Flash,但在 Javascript(您的意思是在浏览器中)和 Silverlight 中,您几乎受限于 http 协议。

您可以使用AJAX Http Streaming 模式。与您尝试的不同的基本想法是,一旦数据可用,未完成的请求就会结束,并且立即异步启动新的请求,这意味着您的客户端处理新到达的数据。

Silverlight 为您提供了更多选择,因为 HTTP 堆栈是纯异步的,但您可以通过HttpWebRequest.AllowReadStreamBufferingfalse. (与始终缓冲的 XmlHttpRequest 不同)。

于 2009-01-13T13:49:46.790 回答
1

将 Comet 创意用于通知非常容易。您甚至不必使用特定于彗星的框架。只需在回答时执行一个带有回调的 ajax 请求,将其包装在一个循环中,您就有了一个事件循环,就像一个 GUI 应用程序一样。在服务器端,在有事件或超时(这只是一个“空”事件)之前不要费心回答请求。

于 2009-01-13T14:47:33.350 回答
0

Flex 和 Flash 有几个支持数据推送的 AMF/XML 远程处理库。我肯定会调查的。

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

这些库使用类似Comet的实现来实现这一点。

于 2009-01-13T14:11:59.070 回答