在 Java EE 中持续 运行 服务
Constantly Running Service in Java EE
您将如何在 Java EE 中实施持续 运行ning 服务?
我想做什么:
- User1连接到一个服务池;等待响应。
- User2连接到同一个服务池;等待响应。
- 服务器对服务池中的所有用户执行任务(匹配用户)。
- 服务器returns一旦匹配到合适的用户就响应;如果 User1 与 User2 匹配,则 User1 收到 User2 作为响应,而 User2 收到 User1。
我不是在问如何执行任务(匹配)。我想问的是,只要池中有用户,如何拥有此服务器服务 运行?
在Java EE中,似乎没有独立的运行ning方法支持。我唯一能想到的是:
- 独立线程上的无限循环
- 定时服务
我想知道是否有 another/better 方法。
您发现了 2 个不同的问题:
- 您希望不同的 session 彼此互动
- 您希望服务器在可以匹配用户后发送响应
对于第一部分,您可以在 ServletContext 中放置一个专门的 bean 或 object,sessions 将在其中注册他们的用户并从中获得匹配的用户。如果你想从那时起允许双向交换,你可以使用某种类型的缓冲区,其中一个 session 在另一个读取的地方写入。您还应该使用 SessionListener 在 session 关闭后立即注销它。
对于第二部分,您必须意识到您不能希望 HTTP 连接在您需要时一直存在。即使服务器和客户端都没有短超时,您也可能会通过任何其他可以关闭它的网络设备(代理、路由器等),恕不另行通知。恕我直言,最可靠的方法是让页面通过 javascript、HTTP 刷新 header 或 <meta http-equiv="refresh">
标签自动刷新。
对于 运行 幕后流程,您实际上是正确的。可以使用无限循环或Timer Service。也看看 Quartz。您只需要在某种线程安全集合中注册用户。
对于实时更新,您无法确定 HTTP 请求是否会等待足够长的时间。可能只是超时。您需要使用 WebSockets 或 CometD 来抽象 publish/subscribe 通道。您应该使用接受异步 HTTP 请求的 Java EE 服务器(即支持 Servlet 3)
您将如何在 Java EE 中实施持续 运行ning 服务?
我想做什么:
- User1连接到一个服务池;等待响应。
- User2连接到同一个服务池;等待响应。
- 服务器对服务池中的所有用户执行任务(匹配用户)。
- 服务器returns一旦匹配到合适的用户就响应;如果 User1 与 User2 匹配,则 User1 收到 User2 作为响应,而 User2 收到 User1。
我不是在问如何执行任务(匹配)。我想问的是,只要池中有用户,如何拥有此服务器服务 运行?
在Java EE中,似乎没有独立的运行ning方法支持。我唯一能想到的是:
- 独立线程上的无限循环
- 定时服务
我想知道是否有 another/better 方法。
您发现了 2 个不同的问题:
- 您希望不同的 session 彼此互动
- 您希望服务器在可以匹配用户后发送响应
对于第一部分,您可以在 ServletContext 中放置一个专门的 bean 或 object,sessions 将在其中注册他们的用户并从中获得匹配的用户。如果你想从那时起允许双向交换,你可以使用某种类型的缓冲区,其中一个 session 在另一个读取的地方写入。您还应该使用 SessionListener 在 session 关闭后立即注销它。
对于第二部分,您必须意识到您不能希望 HTTP 连接在您需要时一直存在。即使服务器和客户端都没有短超时,您也可能会通过任何其他可以关闭它的网络设备(代理、路由器等),恕不另行通知。恕我直言,最可靠的方法是让页面通过 javascript、HTTP 刷新 header 或 <meta http-equiv="refresh">
标签自动刷新。
对于 运行 幕后流程,您实际上是正确的。可以使用无限循环或Timer Service。也看看 Quartz。您只需要在某种线程安全集合中注册用户。
对于实时更新,您无法确定 HTTP 请求是否会等待足够长的时间。可能只是超时。您需要使用 WebSockets 或 CometD 来抽象 publish/subscribe 通道。您应该使用接受异步 HTTP 请求的 Java EE 服务器(即支持 Servlet 3)