c# - 如何处理长 AJAX 请求 - 发送响应但继续工作

标签 c# java ajax multithreading jquery

我们使用 jquery-ajax 将指令集从浏览器发送到多层网络应用程序。第一个组件(组件 A,用 C# 编写)验证指令并将其保存到数据库中,然后调用第二个组件(组件 B,用 Java 编写,也通过 HTTP 调用),后者在从相同的数据库中检索指令后对指令进行操作数据库。浏览器客户端在提交作业后只是通过组件A轮询rdbms表,因此在发送请求后实际上断开连接,并不等待组件A的响应。

中间层(组件 A)向客户端返回成功消息以确认任务已成功提交,但随后仍向任务处理程序(组件 B)发出请求并释放所有请求的最佳方式是什么?它的资源?返回响应是页面的最终操作,因此我们必须在将响应发送回浏览器之前在另一个线程中执行某些操作。

我们考虑过的另一种选择是在组件 B 中发生这种情况,其中任务处理程序向中间层发送一个即时响应以确认请求,但随后继续在后台工作。唯一的区别是我们在哪里生成额外的线程来完成工作。

关于如何处理这个问题有什么好的想法吗?

最佳答案

有一些方法可以通过生成线程来手动处理这种情况。但是你将面临的一个主要问题(我在我的编程经验中遇到过)是线程有点难以维护,如果处理不当会有几个缺点。第一个是错误处理能力是有限的,你必须有一个外部表(持久的)或一个全局变量记录或捕获所有这些错误。另一个问题是服务器可以接受的处理限制。如果您在后台生成太多线程,服务器处理限制以及它同时发出的数据库请求将在以后变得很痛苦。

要避免的最佳解决方案是通过任何可用的后台任务框架。它们的优点是它们将遵循生产者/消费者队列模式,并通过在后台运行的单独守护进程为您完成所有跟踪。但是这里的缺点是守护进程仍然容易受到攻击。

另一种选择是集成队列或消息服务,如 Rabbit MQ .这不仅可以扩展,而且可以在不同语言中提供非常好的实现。

关于c# - 如何处理长 AJAX 请求 - 发送响应但继续工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8434455/

相关文章:

c# - Xamarin Forms and Material design,如何改变提示颜色

java - 两个 Activity 之间重复传递数据

java - ORA-01654 : unable to extend index

Rails 3 中的 jQuery Ajax 调用收到 401 未经授权的请求

c# - 使用 ajax() 和 jsonp 调用 asp.net 远程 webservice .asmx 时出现意外标记 <

ajax - 如何在 jquery 中使 ajax 数据键动态化?

c# - DateTimeOffset 格式化

c# - 将图像添加到 pictureBox

c# - 我下面的代码中可能存在路径遍历漏洞吗?

java spring 上下文 :property-placeholder manually loading