请教一个算法,用服务器调配多客户端
是这样的,我这里在开发一个客户端/服务器端的软件。其中,客户端是c++,服务器是php,简单来说流程是客户端请求服务器端-->服务器端给客户端一组指令-->然后客户端执行指令。
有多台客户端,而且客户端上线时间是不确定的。
服务器有一个指令集,其中每一条指令都有一个限定时间,只能在指定的时间以后执行。
哪台客户端在某指令的指定时间以后请求就把该指令发给该客户端执行。
客户端得到的指令不一定会得到正确的执行,所以在正确执行指令以后,客户端会返回给服务器一个已执行的标记。
正确流程是:
客户端请求服务器端-->服务器端给客户端一组指令-->然后客户端执行指令-->正确执行-->返回正确给服务器端
不正确的流程是:
客户端请求服务器端-->服务器端给客户端一组指令-->然后客户端执行指令-->不正确执行-->不返回任何信息
现在问题就来了:
因为一定要在每个限定时间以后才能执行指令,而且应该在接下来的一个小时内把指令执行完。
客户端请求服务器端指令集的间隔一定要是30分钟,一次发送一批指令过去,并且存在指令失效的可能。
客户端返回正确给服务器,不限定时间,什么时候正确执行完,什么时候返回。
1.如果这样设计流程:
客户端请求服务器端-->服务器检索在执行时间在当前时间以前的指令集合-->服务器端给客户端一组指令-->服务器删除该组指令-->客户端执行指令
倘若正确执行还好,看不出什么问题,假如指令失效,那么该组指令就永远得不到执行。
2.如果这样设计流程:
客户端请求服务器端-->服务器检索在执行时间在当前时间以前的指令集合-->服务器端给客户端一组指令-->客户端执行指令-->返回正确给服务器端-->服务器删除该组指令
这样能够保证指令得到正确执行了,但是如果第二台客户端在第一台客户端返回正确给服务器以前,请求指令,就可以得到第一台客户端的指令,这样,指令就可能会重复执行。
我想了很久,如果指令重复无法避免,怎么才能让重复的可能性变到最小。
我现在有超过50台客户端,最坏的可能会重复执行超过50次,这个很难接受,我顶多接受重复一两次,而且还是小概率事件。
或者有没有什么更好的模型或者算法,可以让服务器控制客户端执行指令,而且同时满足这三个条件:
1.一定要在每个限定时间以后才能执行指令,而且应该在接下来的一个小时内把指令执行完。
2.客户端请求服务器端指令集的间隔一定要是30分钟,一次发送一批指令过去,并且存在指令失效的可能。
3.客户端返回正确给服务器,不限定时间,什么时候正确执行完,什么时候返回。