加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:03:46 所属栏目:asp.Net 来源:网络整理
导读:用户可以在我们的网络应用程序上执行一个操作,该操作需要100ms到10s的任何时间,我希望立即将结果返回到浏览器,然后在任务完成处理后将结果显示给用户.该操作是同步来自第三方的数据,并且被实现为类库(DLL). 通常建议使用像RabbitMQ或MSMQ这样的队列,并有一名
用户可以在我们的网络应用程序上执行一个操作,该操作需要100ms到10s的任何时间,我希望立即将结果返回到浏览器,然后在任务完成处理后将结果显示给用户.该操作是同步来自第三方的数据,并且被实现为类库(DLL).

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

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

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

例子

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

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

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读