asp.net – 在Web应用程序中排队长时间运行的任务

用户可以在我们的网络应用程序上执行一个操作,该操作需要100ms到10s的任何时间,我希望立即将结果返回到浏览器,然后在任务完成处理后将结果显示用户.该操作是同步来自第三方的数据,并且被实现为类库(DLL).

通常建议使用像RabbitMQ或MSMQ这样的队列,并有一名工作人员将结果写入数据库,该数据库由浏览器的AJAX请求进行轮询,以检查更新.

然而,目的是减少延迟,使其尽可能地同步地运行任务,同时能够处理长时间运行的任务的尖峰而不影响网站的其余部分.

后端应该如何架构?在我看来,该过程将是:启动任务,以最小延迟运行任务,通知最终用户任务完成(ASAP),最后在浏览器中显示结果.

例子

使用http://www.xml-sitemaps.com/生成站点地图使用分块传输编码来发送< script>标记每秒钟调用一个Javascript函数来更新具有最新状态的页面.

使用https://www.ssllabs.com/ssltest/检查SSL证书似乎刷新整个页面并更新状态.

解决方法

这种情况比较简单,我根本不推荐投票.

考虑使用常规的Ajax方法页面的一部分能够在没有页面的其余部分的情况下进行刷新.所以这部分(ajax部分)是自己同步的,但是从整个页面的角度来看异步(因为它刷新而不重新加载整个页面).

因此,当需要计算该信息时,页面的ajax部分将作为常规请求提交.当请求处理完成时,页面的该部分可以立即访问响应并显示结果.

优点是您没有轮询开销,并且结果立即显示在屏幕上(尽可能按照您的要求).此外,只有一个请求正在处理,而不是在轮询时可能会丢失几个请求.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....