我被要求编写一个基于Java的小型Web应用程序,它可以运行几个小时,可以作为带有calculate-print-flush循环的单个JSP页面实现。这很好用。几个独立的计算将同时并行运行。
我希望能够检测到用户不再对计算感兴趣(通过关闭浏览器或重新加载等),这样我就可以中断并正常关闭计算。
Jetty 9作为容器的初步实验表明容器没有通知线程另一端的浏览器停止接受输出(使用Chrome测试)而不是抛出InterruptedException。
自从我做JSP之后已经有一段时间了。我可以投入一个Javascript库代码段做魔术或类似的东西,但我需要它是容器独立的,因为我没有控制部署容器。
有什么建议吗?
答案 0 :(得分:2)
AJAX?
你不能试试AJAX吗?正如你讲到的Javascript魔法,我想你可以尝试一下。继续在一个间隔内发送一个AJAX(带时间戳),说明该用户还活着。一旦请求停止发送 - 您可以假设他已经离开了!因此你可以关闭线程。
很抱歉,如果你觉得这很有趣,我只是一个初学者。
答案 1 :(得分:1)
添加会话侦听器。当用户注销或服务器注意到与浏览器的连接丢失时,它最终会删除会话并调用所有会话侦听器。
只需将会话超时设置为5分钟。
答案 2 :(得分:0)
您可能想了解一下websockets。我不确定您的AS是否支持此功能,或者您的应用程序是否有意义。如果它看起来太多并且你只想要一些简单的东西,你可以使用SessionListener
(尽管你可能包含在超时中),使用提供AJAX Push的JSF库或者只编写你自己的Ajax推送。
e.g。网箱RemoteEndpoint.sendPing
@See:http://docs.oracle.com/javaee/7/tutorial/doc/websocket.htm