在 gwt 客户端中,我可以通过让 Async 接口(interface)中的方法返回一个 Request 对象来取消请求,该对象包含我可以调用的 cancel() 方法。
到目前为止一切顺利,但是有没有办法在服务器上运行的 java 代码中检测到这一点?
我的用例是,我有一个 rpc 调用,需要很长时间才能在服务器上完成,并且用户可以使用“取消”按钮来停止请求。
并且如果用户取消请求,服务器应该停止处理,但似乎没有办法检测客户端是否关闭了连接。
最佳答案
使用服务器的请求线程来执行长时间运行的任务通常不是一个好主意。您需要重新设计它们以异步执行(如果您还没有这样做)。您可以利用 FutureTask 和 Executors 等 java.util.concurent 工具来实现此目的。您还需要使用线程池来确保控制并发任务的最大数量。
当您从客户端提交长任务请求时,您需要在安排执行后立即向 FutureTask 返回一个引用键(例如 UUID 或某个唯一字符串)。然后要取消任务,您需要从客户端传递 key 并查找您的任务并取消它:
有关更多详细信息,请参阅 javadoc:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/FutureTask.html
关于java - 使用 gwt-rpc 时检测服务器上取消的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27932494/