Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET-服务器上解压缩文件的网页请求_Asp.net_Multithreading_Zip_Remoting_Unzip - Fatal编程技术网

ASP.NET-服务器上解压缩文件的网页请求

ASP.NET-服务器上解压缩文件的网页请求,asp.net,multithreading,zip,remoting,unzip,Asp.net,Multithreading,Zip,Remoting,Unzip,我们使用。我们需要能够解压服务器上的文件,并把它们放在单独的文件夹。解压文件的请求将来自网页上的用户。我想如果文件足够大,解压需要很长时间。我们不希望用户在等待解压完成以继续浏览网站时被困在页面上 处理这种情况的好方法是什么:剥离一个不同的线程来处理解压缩文件,创建一个单独的windows服务来解压缩文件,或者……什么 通过单独的线程或窗口服务做这件事的优缺点是什么 就我个人而言,我会通过Windows服务路线,在它们之间传递消息,以获取进展,例如将句柄返回到解压状态,用于监视状态 不过,我认为

我们使用。我们需要能够解压服务器上的文件,并把它们放在单独的文件夹。解压文件的请求将来自网页上的用户。我想如果文件足够大,解压需要很长时间。我们不希望用户在等待解压完成以继续浏览网站时被困在页面上

处理这种情况的好方法是什么:剥离一个不同的线程来处理解压缩文件,创建一个单独的windows服务来解压缩文件,或者……什么


通过单独的线程或窗口服务做这件事的优缺点是什么

就我个人而言,我会通过Windows服务路线,在它们之间传递消息,以获取进展,例如将
句柄
返回到解压状态,用于监视状态


不过,我认为您也可以剥离一个线程来执行它,它将愉快地执行并返回页面。

我将使用一个异步进程,您可以轻松地从支持AJAX的页面进行轮询。完成后,页面的AJAX部分可以显示用户在等待进程同步完成时通常会显示的详细信息。

单独进程的优点
在一个单独的进程中完成的工作可以在时间上、物理上以及从安全的角度上与页面流解耦。在时间上解耦:如果您选择,您可以缓冲解压请求,直到“稍后”负载较低,并且您有空闲的cpu周期来解压

也在物理上解耦;对于大型系统,您可以有多个工作进程,甚至部署在多台独立的机器上,以异步方式执行此工作,并且该处理层可以独立于网页处理进行扩展。在任何系统中都存在瓶颈,分布式部署的优点是您可以独立地扩展单独的工作负载,以更有效地消除瓶颈

我想说的是,后一种好处只在非常大规模的系统中有用。在大多数情况下,您的事务量不会从独立的物理扩展层中受益。这不仅适用于您的工作负载,而且适用于98%的所有工作负载。YAGNI原则也适用于可伸缩性

物理解耦还允许独立开发不同的工作负载(页面流和zip解包)。换句话说,假设workitem不是一个简单的“解压文件”,而是更复杂的东西,有多个步骤和决策点。在单独的进程中设计工作处理器,可以独立于工作项处理来构建和测试页面流。如果它们必须独立进化,这将是一个很好的优势

如果工作项通过不同的通道到达,这种物理解耦也很好。假设网页不是工作项到达的唯一途径。假设您有一个ftp拖放、一个web服务或一个机器监控的电子邮件箱,也可以接收工作项。在这种情况下,将workitem processing物理调用与web页面处理分离是有意义的

最后,这些东西在运行时的安全性上是解耦的。在某些web应用服务器部署中,安全规则禁止web服务器写入磁盘-web服务器没有可写磁盘存储。一个单独的异步工作进程可以部署在网络的一个单独的部分,具有大量的存储,并且它可能受到一组单独的安全需求的限制。这可能适用于您,也可能不适用于您

线程处理的优势
在单独的线程中执行工作的优点是它要简单得多。解耦带来了复杂性和成本。在一个单独的线程中管理工作,您没有管理单独进程(可能是单独的机器)的任何操作开销。没有其他配置,也没有新的构建/部署步骤。没有额外的备份。无需维护其他安全标识。无需担心通信交换(线程调度之外)

您可以选择对workitem处理进行更复杂的处理,并且可以选择在zipfile看起来足够小时同步进行处理。假设您建立了一个4秒响应时间的阈值——高于该阈值,您需要异步工作负载,低于4秒,您可以“内联”完成。当然,你永远不知道一个zipfile需要多长时间,但是你可以根据文件的大小建立一个好的启发式方法。无论您是使用外部进程进行异步工作,还是使用单独的线程,这种优化都是可用的,但老实说,在使用单独的线程时,利用优化更简单。更少的额外工作要做。因此,这是线程方法的一个优势

非差异化因素
如果您选择使用AJAX轮询机制来通知工作项状态,则可以使用单独的进程或单独的线程。我不知道您将如何进行工作项跟踪,但我假设当某个特定的工作项(zip文件?)完成时,您将在某个地方更新一条记录—文件系统中的一个文件,数据库中的一个表。无论更新是由同一进程中的线程完成,还是由单独的进程(Windows服务)完成,都会发生此更新。因此,在任何情况下,轮询的AJAX客户机都将只检查db表或文件系统,并将以相同的方式获得workitem状态通知,而不管您的架构决定如何

如何决定
该理论很有趣,但最终毫无用处,没有实际的操作限制

工作负载是现实世界中的关键项目之一。你没有说这些zip文件有多大,但我猜它们是“常规大小”。