我正在构建一个具有一些非常特殊需求的客户端/服务器应用程序。有两种服务器:第一种提供大多数远程过程,客户端直接连接到这些服务器,而第二种是单个服务器,应该跟踪用户的活动(客户端)和第一种服务器的数量在调用方法时,kind是活动的。
主要是监视器应该只连接到服务器而不是直接连接到客户端。我的第一个想法是当客户端连接/断开并跟踪列表中的那些时实现一个简单的登录/注销rmi方法,但主要问题是当客户端或服务器异常终止时。
例如,如果客户端突然脱机,服务器应以某种方式通知并相应地更新列表,而如果服务器熄灭,则连接到它的所有客户端都应在控制服务器中标记为不活动。
如何实现此功能的任何想法将不胜感激。
答案 0 :(得分:0)
我建议对问题实施“会话”方法,其中服务器和客户端每隔几分钟(根据您的需要可能是几秒或几小时)向监控服务器发送“心跳”方法调用。如果监视服务器在一定时间内没有从服务器或客户端收到“心跳”,那么您认为它们已经消失(异常终止)并相应地通知。
答案 1 :(得分:0)
Zookeeper可能需要关注。让每个客户端服务器为自己以及连接到它的每个客户端注册一个临时节点。当客户端服务器关闭时,短暂的节点将会死亡。监视器服务器只需要观察zookeeper以查看谁已启动并已连接。
为了检测客户端关闭,您需要某种听力,以便客户端服务器可以检测客户端何时死亡。如果客户端可以直接与zookeeper通信,那么只需让客户端在zookeeper中注册一个临时节点,客户端服务器就可以监视客户端的临时节点,并知道客户端何时关闭。