优化调用相同服务的异步多请求操作

时间:2015-07-03 19:03:57

标签: java ajax websocket

我们正在开发文档管理Web应用程序,现在我们正在考虑如何处理多个文档的操作。例如,假设用户多选择100个文档并想要删除所有文档。到目前为止(我们不支持多项选择),deleteDoc操作会根据ajaxdeleteDocument服务发出docId请求。该服务依次调用相应的实用程序函数,该函数执行所需的权限检查并继续从数据库中删除该文档。当涉及多重删除时,我们不确定什么是最好的方法。我们已经找到了很多解决方案,但不知道哪一个是最好的(实践),我正在寻求建议。请注意,我们热衷于尽可能保持后端代码的完整性:

  1. 创建一个新的multipleDeleteDocument服务,该服务根据我们要删除的文档数量多次调用单个文档删除实用程序函数(在我看来是丑陋的,与现代实践相反直观)。
  2. 保留后端代码,而不是为每个文档在服务上发出ajax请求。
  3. 不知何故(我不知道这是否可能)将请求批量处理为一个,但仍然让服务器执行deleteDocument服务X次。
  4. 使用WebSockets进行多次删除操作,从根本上减少通信开销和时间。我们的应用程序通常运行在lan网络上,具有低延迟,这对于websockets是最佳的(当引入延迟时,Web套接字往往与http请求速度匹配)。
  5. 我们没有想过的东西?

2 个答案:

答案 0 :(得分:0)

选择3选项对我来说是最优雅的解决方案。

假设您发送POST /deleteDocument之类的docId请求作为参数,您可以传递一系列文档ID来删除。

然后在后端,你只需要遍历id列表并执行删除。您应该能够保持删除代码相对完整。

答案 1 :(得分:0)

当所有数据可以组合成单个调用或消息时,发送N个Ajax调用或N个webSocket消息绝不是最佳解决方案,因此选项2和4肯定不理想。我认为没有特别的理由在Ajax调用上使用webSocket。如果你已经有了一个webSocket连接,那么你当然可以通过webSocket发送带有文档ID列表的单个删除消息,但是如果Ajax调用也可以正常工作,那么我就不会创建一个webSocket连接为了这个目的。

选项1和3都需要一个新的服务端点,允许您进行一次调用以删除多个文档。建议这样做。

如果我正在设计这样的API,我会设计一个带有一个或多个文档ID的删除端点。这样,无论是删除单个文档还是多个文档,都可以使用相同的API调用。

然后,只要您有多个要删除的文档,就可以从客户端随时收集它们并进行一次API调用以立即删除所有文档。

服务器内部,您实现该API的方式取决于您的数据存储。如果您的数据存储还允许发送多个要删除的文档,那么您同样会以这种方式调用数据存储。如果它只支持单个删除,那么你只需循环并逐个删除每个删除。