2013-07-14 50 views
0

我有这个问题,我需要从Web应用程序(在服务器上)压缩(zip)多个文件,然后再将其传输到浏览器。我从连接到SQL数据库的单独服务中提取文件。因此,在打开服务中的文件时存在巨大的延迟,并且在压缩包可以流式传输到浏览器之前压缩文件会出现延迟。理想情况下,我希望页面上的DOWNLOAD按钮调用服务器上的SignalR方法,然后在多个文件压缩完成后将通知返回给客户端。这样,浏览器就不会请求服务器立即流式传输压缩文件。它只会在多个文件完成压缩后才开始流式传输。对单个客户端使用ASP .Net SignalR进行长轮询?

背景资料:我使用的是IIS 7.5和MVC 4

我一直在阅读并观看SignalR影片,但只看到聊天枢纽的例子,并推送到多个客户端,等会有可能只为使用请求的客户端使用SignalR?如果是这样,我将不胜感激一些示例代码,或者可能链接到一个教程如何能够完成这样的事情。谢谢!

+0

这听起来不像长轮询实际上。您想要完成的功能与聊天中心的功能非常类似 - 一台客户端将数据推送到服务器,然后将服务器推送到其他服务器。在你的情况下,一个客户端请求下载,然后服务器一旦准备好就将有效负载推回到同一个客户端。真的,非常相似的机制,除非你的过程的本质有什么特别之处,否则调整你所看到的代码示例应该相当容易。 –

+0

长轮询是SignalR通信的方式之一,SignalR的所有功能都可以与任何底层通信方法一起使用,无论是长轮询,Web套接字还是其他。现在在你的情况下它的@RichardNeilIlagan,使用示例聊天应用程序,而不是发送文本,你可以发送文件(字节数组) – MEYWD

+0

我工作的公司不喜欢使用AJAX流安全的原因文件。SignalR是否利用AJAX在Client和Server之间来回通信?我的想法是简单地使用SignalR来“发信号”(不是双关语)客户端,让它知道它现在可以请求下载。然后客户端会请求一个文件,并且下载过程会像平常一样发生(即服务器会使用正常的http进程来传输文件)。这对SignalR可行吗? – TheDude

回答

1

达到你需要什么,你必须定义3个客户端

  • 浏览器,它会调用集线器当请求下载,然后它会等待来自通话Hub下载文件。
  • 服务器,收到通知从集线器当浏览器请求下载,而当一切都准备好电话集线器通过的文件。
  • 的服务,从收到的文件集线器当其从通过服务器,使文件可供下载,然后发送一个通知集线器通知浏览器

注意

存储大文件在内存中,不推荐,并使其通过SignalR不,除非它的唯一的出路服务器和服务可以共享文件,因此如果你有一个共同的存储 - 磁盘或数据库 - 那么它更好地使用它