我这个程序是由服务端和客户端组成的,现在我想在服务端实现对客户端的侦听,以确定客户端是否在线。
具体实现是,在服务端做了一个线程以向所有客户端发送消息。如果有10个用户,并且都在线,那么我需要等待这10个在线用户的回应消息都返回了,我认为一次侦听操作完成;那么如果只有前5个用户在线,而后5个用户不在线,但这个时候服务程序是不知道的,那么服务程序在向所有客户端发完消息后,在线用户会返回消息,离线用户肯定返回不了,在服务程序中如何判断已经接收完在线用户的回应消息呢?以完成一次侦听。
因为UDP是没有确认消息返回的,所以我只能用这种方法来实现。问题就出在我如何知道所有在线用户的回应消息已经发完。我现在是在服务接收中做了一个记数器,每接收一个就加1。然后用另一个线程去监视这个记录数器,当在一定时间内记数器没有变化,我就认为接收消息完毕。还有什么好的方法吗?不知道说清楚没有。
具体实现是,在服务端做了一个线程以向所有客户端发送消息。如果有10个用户,并且都在线,那么我需要等待这10个在线用户的回应消息都返回了,我认为一次侦听操作完成;那么如果只有前5个用户在线,而后5个用户不在线,但这个时候服务程序是不知道的,那么服务程序在向所有客户端发完消息后,在线用户会返回消息,离线用户肯定返回不了,在服务程序中如何判断已经接收完在线用户的回应消息呢?以完成一次侦听。
因为UDP是没有确认消息返回的,所以我只能用这种方法来实现。问题就出在我如何知道所有在线用户的回应消息已经发完。我现在是在服务接收中做了一个记数器,每接收一个就加1。然后用另一个线程去监视这个记录数器,当在一定时间内记数器没有变化,我就认为接收消息完毕。还有什么好的方法吗?不知道说清楚没有。
具体可以参考Remoting的广播看一下。
服务程序不可能知道何时收完所有客户端的应答消息,如果知道的话,就说明你已经知道哪些在线哪些不在线了
一次侦听的完成不可能以收到全部应答为完成,而只能是以一段时间为一次,这段时间内没有收到应答的就认为是离线了,为防误判,可以以连续若干次timeout为判断条件客户端向服务器端发送消息则是以固定时间间隔发送消息,连续若干个时间间隔没有收到某客户端的消息则认为是离线了