Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 优化调用同一服务的异步多请求操作_Java_Ajax_Websocket - Fatal编程技术网

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

Java 优化调用同一服务的异步多请求操作,java,ajax,websocket,Java,Ajax,Websocket,我们正在开发一个文档管理web应用程序,现在我们正在考虑如何处理多个文档上的操作。例如,假设用户多次选择100个文档,并希望删除所有文档。到目前为止(我们不支持多选),deleteDoc操作根据docId向deleteDocument服务发出ajax请求。服务依次调用相应的实用程序函数,该函数执行所需的权限检查,并继续从数据库中删除文档。当涉及到多次删除时,我们不确定什么是进行删除的最佳方式。我们已经找到了很多解决方案,但不知道哪一个是最佳的(-practice),我正在寻求建议。请注意,我们希

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

  • 创建一个新的
    multipleDeleteDocument
    服务,根据要删除的文档数量多次调用single doc delete实用程序函数(我认为这很难看,而且与现代实践背道而驰)
  • 保持后端代码不变,相反,对于每个文档,对服务发出
    ajax
    请求
  • 不知何故(我不知道这是否可能)将请求批处理成一个请求,但仍然让服务器执行
    deleteDocument
    服务X次
  • 使用
    WebSockets
    执行多重删除操作,可以大大减少通信开销和时间。我们的应用程序通常运行在低延迟的
    lan
    网络上,这是WebSocket的最佳选择(当引入延迟时,web套接字往往与http请求速度相匹配)
  • 我们没想到的事

  • 对我来说,选择
    3
    将是最优雅的解决方案

    假设您发送像
    POST/deleteDocument
    这样的请求,其中有
    docId
    作为参数,那么您可以传递一个要删除的文档ID数组


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

    当所有数据都可以组合到一个调用或消息中时,发送N个Ajax调用或N个webSocket消息从来都不是最佳的解决方案,因此选项2和4肯定不理想。我看不出有什么特别的理由在Ajax调用上使用webSocket。如果您已经有一个webSocket连接,那么您当然可以通过webSocket发送一条带有文档ID列表的删除消息,但是如果Ajax调用也可以工作,那么我不会为此创建webSocket连接

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


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

    然后,无论何时从客户端删除多个文档,都要将它们收集在一起,并进行一次API调用以一次删除所有文档


    在服务器内部,如何实现该API取决于您的数据存储。如果您的数据存储还允许发送多个要删除的文档,那么您也可以这样调用数据存储。如果它只支持单次删除,那么您只需循环并单独删除每一次。

    在删除过程中,您希望向用户提供什么样的反馈?我认为你在寻找最佳解决方案时应该考虑到这一点。如果类似于
    删除n-xyz.doc的文档1
    ,那么选项
    2
    应该可以。我甚至会去重构前端删除请求代码,以便在一个文档中使用multi-delete,这样一来,您将拥有一个前端代码来处理所有文档,而后端代码保持不变。这是一个好主意,可以让最终用户在发出多个请求时保持占用状态。。。然而,不管用户体验如何,我仍然在这里寻找最佳性能(看到每个操作的进度条很酷,但如果每个请求都需要1秒,那就太多了)。此解决方案是否会强制前端
    deleteDoc
    操作向服务器发送文档ID的
    数组
    ,即使它只是一个文档?我真的不喜欢为了满足后端服务支持多个id的需要而将单个
    id
    放入一个数组中。这就是为什么选项3实际上是一种批处理的方法,例如10个http请求和10个单独的docid,每个docid都自己调用服务。我只是不知道这是否可能,以及如何实现它。有没有办法让服务同时接受单个docId参数或docId列表?现在,从我所看到的情况来看,它是一个或另一个,我希望避免为了满足服务支持多个ID的需要而将单个docID放入数组。@Konstantine-当然-这一切都取决于您如何将参数发送到服务。如果您使用的是查询参数,则单个删除可能如下所示:
    http//mydomain.com/api/delete?id=12
    多重删除可能如下所示:
    http//mydomain.com/api/delete?id=12,17,29