Java RMI客户端跟踪

Java RMI客户端跟踪,java,rmi,Java,Rmi,我正在构建一个客户机/服务器应用程序,它有一些非常特殊的需求。有两种服务器:第一种服务器提供大多数远程过程,客户端直接连接到这些过程,而第二种服务器是一台服务器,它应该跟踪哪些用户处于活动状态(客户端),以及在调用方法时第一种服务器的活动数量 最重要的是,监视器应该只连接到服务器,而不是直接连接到客户端。我的第一个想法是在客户端连接/断开连接时实现一个简单的登录/注销rmi方法,并跟踪列表中的内容,但主要问题是当客户端或服务器异常结束时 例如,如果客户端突然脱机,则应以某种方式通知服务器并相应地

我正在构建一个客户机/服务器应用程序,它有一些非常特殊的需求。有两种服务器:第一种服务器提供大多数远程过程,客户端直接连接到这些过程,而第二种服务器是一台服务器,它应该跟踪哪些用户处于活动状态(客户端),以及在调用方法时第一种服务器的活动数量

最重要的是,监视器应该只连接到服务器,而不是直接连接到客户端。我的第一个想法是在客户端连接/断开连接时实现一个简单的登录/注销rmi方法,并跟踪列表中的内容,但主要问题是当客户端或服务器异常结束时

例如,如果客户端突然脱机,则应以某种方式通知服务器并相应地更新列表,而如果服务器脱机,则应在控制服务器中将连接到它的所有客户端标记为非活动


任何关于如何实现此功能的想法都将不胜感激

我建议对问题实施“会话”方法,服务器和客户端每隔几分钟(可能是几秒或几小时,取决于您的需要)向监控服务器发送一次“心跳”方法调用。如果监控服务器在一定时间内没有从服务器或客户端接收到“心跳”,则认为它们已经消失(异常终止)并相应地通知。

可能是值得关注的事情。让每个clientserver为自己和连接到它的每个客户端注册一个临时节点。当clientserver关闭时,临时节点将死亡。监控服务器只需监视zookeeper,即可查看谁已启动并连接


为了检测客户机宕机,您需要某种类型的监听,以便clientserver能够检测到客户机何时死机。如果客户端可以直接与zookeeper对话,那么只需让客户端在zookeeper中注册一个临时节点,客户端服务器就可以监视客户端的临时节点,并知道客户端何时停机。

Hmm是的,这应该可以很好地工作。我猜heartbeat方法只是一个偶尔会被调用的方法,所以在单独的线程中运行它应该可以让用户隐藏一些东西。