我正在使用http over端口80对实时通知机制进行原型设计。该项目的目的是允许Flash应用程序快速响应远程服务器上的事件(特别是下一次连接到手机的入站电话)计算机。)轮询是一种方法,但速度太慢。目前,我使用套接字连接来获取服务器上事件的低延迟通知,这种方法运行良好但不具有防火墙功能。我不想在客户端上安装除Flash或Silverlight之外的任何东西。浏览器的交叉兼容性不是问题 - 在此应用程序中,我可以指定客户端使用的浏览器,但首选IE。
我在.NET中创建了一个服务器HttpHandler,它永远不会关闭连接,并通过将字节写入http响应流(ConnectedClientContext.Response.OutputStream.Write等)将“事件”发送到客户端,我有一个可以读取这些消息的.NET客户端应用程序。
我的问题:
我可以使用JavaScript,Flash或Silverlight通过HTTP接收来自服务器的字节吗?到目前为止,我只能找到一种方法来获得“下载进度”的通知,并且在响应关闭之前不会得到实际的字节 - 我希望它们到达时。
最诚挚的问候,
丹尼尔
答案 0 :(得分:1)
我不知道Flash,但是在Javascript中(你在浏览器中的意思)和Silverlight你对http协议的限制很多。
您可以使用AJAX Http Streaming pattern。与您尝试的不同的基本思想是,只要数据可用,未完成的请求就会结束,并且会立即异步启动新的,这意味着客户端处理新到达的数据。
Silverlight为您提供了更多选项,因为HTTP堆栈完全是异步的,但是只要数据开始到达,您就可以通过将HttpWebRequest.AllowReadStreamBuffering
设置为false
来获取流。 (与总是缓冲的XmlHttpRequest不同。)
答案 1 :(得分:1)
使用Comet想法进行通知非常容易。你甚至不必使用特定于彗星的框架。简单地做一个带回调回答的ajax请求,将它包装在一个循环上,你有一个事件循环,就像一个GUI应用程序。在服务器端,在有事件或超时(这只是'空'事件)之前,不要费心回答请求。
答案 2 :(得分:0)
Flex和Flash提供了几个支持数据推送的AMF / XML远程处理库。我当然会调查一下。
http://raghuonflex.wordpress.com/2008/04/17/data-push-in-flex-with-backend/
这些库使用类似Comet -的实现来实现这一目标。