1

我有一个有趣的问题需要解决,我什至不知道从哪里开始。我正在编写一个 MVC Web 应用程序,它通过表单获取记录列表,并为每个记录进行 ajax 调用。ajax 调用命中的控制器使用一次只能处理一个请求的资源。简单的解决方案是将 ajax 调用更改为同步调用,但是这会挂起浏览器并提供糟糕的体验。

此外,多个用户可能同时使用此应用程序,因此在客户端排队将不起作用。

有人有什么建议吗?

麦克风

4

1 回答 1

0

首先,我的要求和你的不太一样。我的问题是我的后端数据库往往有点慢,而用户响应能力非常重要。

因此,我不得不从等式中删除数据库交互。

我的解决方案有两个主要部分:

  1. 维护数据的服务器端缓存

  2. 创建一个单独的进程来包含所有可以与服务器交互的数据库工作

单独的进程被实现为由 Windows 服务托管的命名管道 WCF 服务。

基本流程概述是:

  1. 用户单击“保存”,Ajax 将表单发布到 Mvc 控制器
  2. 控制器更新缓存数据,然后调用 WCF 管道
  3. 该服务将数据推送到并发队列(连同会话 ID),并返回一个 guid 令牌
  4. 控制器将令牌作为 JSON 响应返回。
  5. jQuery Ajax 处理程序拦截响应并将令牌保存到 6. 代表“已保存”表单的 UI 元素中。

服务本身是这样工作的:

  1. 在开始时创建一个计时器。
  2. 在计时器滴答声中:
  3. 停止计时器。
  4. 从并发队列中删除所有排队的工作项
  5. 发送要由工作处理器处理的每个项目
  6. 将项目添加到“已完成”或“有错误”并发字典中,由较早的会话 ID 键入(以及一些时间保留内容以消除陈旧数据)。这包括原始工作令牌。
  7. 再次启动计时器。

回到用户区,有一个 javascript setInterval 循环正在运行:

  1. 对服务器的 Ajax 请求(心跳控制器)
  2. 控制器连接到服务,并传递当前会话 id
  3. 该服务返回“已完成”和“错误”字典中的所有项目
  4. 控制器将列表作为 JSON 对象数组返回
  5. javascript 循环遍历返回的列表并使用令牌进行适当的 UI 更新

最终结果是一个响应速度非常快的 UI,尽管后端持久服务器很慢。

如果您想要实现代码的任何特定部分,请告诉我。

于 2012-09-06T18:09:38.957 回答