使用gwt-rpc时检测服务器上已取消的请求

时间:2015-01-13 22:15:10

标签: java gwt rpc

在gwt客户端中,我可以通过让Async接口中的方法返回一个Request对象来取消请求,该对象包含我可以调用的cancel()方法。

到目前为止一直很好,但有没有办法在服务器上运行的java代码中检测到这个?

我的用例是我有一个rpc调用,需要很长时间才能在服务器上完成,并且用户有一个"取消"按钮停止请求。

如果用户取消请求,服务器应该停止处理,但似乎无法检测到客户端已关闭连接。

1 个答案:

答案 0 :(得分:1)

将服务器的请求线程用于长时间运行的任务通常不是一个好主意。您需要重新设计它们以异步执行(如果您还没有完成它)。您可以使用FutureTask和Executors等java.util.concurent工具来实现此目的。您还需要使用线程池来确保控制最大并发任务数。

当您从客户端提交长任务请求时,您需要在计划执行时将引用密钥(例如UUID或某些唯一字符串)返回到FutureTask。然后要取消该任务,您需要从客户端传递密钥并查找任务并取消它:

有关更多详细信息,请参阅javadoc:

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/FutureTask.html