我正在使用基于java的游戏服务器。我在服务器端的设计如下 RuleEnforcer在IPlayers列表中传递,并启动与玩家的通信。 IPlayers是一个接口,我想实现一个虚拟播放器用于测试目的,一个" smart"播放器,以及最终与远程客户端UI界面交互的播放器。在RuleEnforcer中调用player方法时,需要确保该方法返回(按时)。例如:
for(player : players) {
player.giveAcard(card);
}
giveACard没有返回类型,每个玩家只需要保存卡并立即返回。但是如果玩家实现在方法调用上休眠,游戏就会被卡住。 我如何在我的代码中考虑到这一点?我能想到的一种方法是在不同的线程中调用玩家交互,并使用等待。是否有适用于此场景的设计,或者我的方法是否错误?
答案 0 :(得分:3)
是的,你可以通过这种方式创造。 创建一个构造函数
SimpleTimeLimiter()
使用Executors.newCachedThreadPool()
构造一个TimeLimiter实例来执行代理方法调用。
新代理的方法细节......
public <T> T newProxy(T target,
Class<T> interfaceType,
long timeoutDuration,
TimeUnit timeoutUnit)
然后拨打超时...
callWithTimeout
public <T> T callWithTimeout(Callable<T> callable,
long timeoutDuration,
TimeUnit timeoutUnit,
boolean amInterruptible)
供参考使用...新代理..
public <T> T newProxy(T target,
Class<T> interfaceType,
long timeoutDuration,
TimeUnit timeoutUnit)