【发布时间】:2013-07-12 13:20:27
【问题描述】:
我有这个问题,我需要先从网络应用程序(在服务器上)压缩(zip)多个文件,然后再将其流式传输到浏览器。我从连接到 SQL 数据库的单独服务中提取文件。因此,在从服务打开文件时会出现巨大延迟,并且在压缩包可以流式传输到浏览器之前压缩文件也会出现延迟。理想情况下,我希望页面上的 DOWNLOAD 按钮调用服务器上的 SignalR 方法,然后在多个文件完成压缩后将通知推送回客户端。这样,浏览器就不会立即请求服务器流式传输压缩文件。只有在多个文件完成压缩后才会开始流式传输。
背景信息:我使用的是 IIS 7.5 和 MVC 4。
我一直在阅读和观看 SignalR 上的视频,但只看到了聊天中心和推送到多个客户端等的示例。是否可以仅将 SignalR 用于发出请求的客户端?如果是这样,我会很感激一些示例代码,或者可能是一个关于如何完成这样的事情的教程的链接。谢谢!
【问题讨论】:
-
这听起来根本不像长轮询。您想要完成的功能非常非常类似于聊天中心的做法——一个客户端将数据推送到服务器,然后服务器将该数据推送给其他客户端。在您的情况下,一个客户端请求下载,然后服务器在准备好后将有效负载推回同一客户端。非常非常相似的机制,除非您的流程的性质有什么特别之处,否则修改您所看到的代码示例应该相当容易。
-
长轮询是 SignalR 通信的方式之一,SignalR 的所有功能都可以与任何底层通信方法一起使用,无论是长轮询、Web 套接字还是其他方式。现在在你的情况下它是@RichardNeilIlagan,使用示例聊天应用程序,而不是发送文本,你可以发送文件(字节数组)
-
出于安全原因,我工作的公司不喜欢使用 AJAX 流式传输文件。 SignalR 是否使用 AJAX 在客户端和服务器之间来回通信?我的想法是简单地使用 SignalR 向客户端“发出信号”(不是双关语),让它知道它现在可以请求下载。然后客户端会请求一个文件,并且下载过程会正常进行(即,服务器将使用正常的 http 过程流式传输文件)。这对 SignalR 可行吗?
-
是的,您可以根据计时器或另一个客户端调用(来自您的下载页面的 JavaScript)从服务器调用带有文件名参数的函数,然后客户端将请求正常归档。
-
我实际上是从 Web 服务中提取文件。有什么方法可以从服务器中提取内存中的文件,然后触发客户端发出 httpRequest 以流式传输该文件?或者,文件是否必须保存在服务器的硬盘上?
标签: asp.net-mvc-4 streaming iis-7.5 signalr long-polling