您如何在Java EE中实现持续运行的服务?
我正在尝试做什么:
我不是在问如何执行任务(匹配)。只要池中有用户,我问如何运行此服务器服务?
在Java EE中,似乎没有独立运行的方法支持。我唯一能想到的是:
我想知道是否还有其他/更好的方法。
答案 0 :(得分:0)
你已经解决了两个不同的问题:
对于第一部分,您可以在ServletContext中放置一个专门的bean或对象,其中会话将注册其用户以及从哪里获得匹配的用户。如果您希望从那时起允许双向交换,您可以使用某种缓冲区,其中一个会话写入另一个会话读取的位置。您还应该使用SessionListener在会话关闭后立即取消注册。
对于第二部分,您必须意识到,只要您需要,您就不能希望HTTP连接能够存在。即使服务器和客户端都没有短暂超时,您也可以通过任何其他可以关闭它的网络设备(代理,路由器......),恕不另行通知。恕我直言,最强大的方法是让页面通过javascript,HTTP刷新标头或<meta http-equiv="refresh">
标签自动刷新。
答案 1 :(得分:0)
对于在引擎盖下运行的过程,你实际上是对的。可以使用无限循环或定时服务。看看Quartz吧。您只需要在某种线程安全集合中注册用户。
对于实时更新,您无法确定HTTP请求是否会等待足够长的时间。可能只是暂停。您需要使用WebSockets或CometD来抽象发布/订阅频道。您应该使用接受异步HTTP请求的Java EE服务器(即支持Servlet 3)