我正在开发一个基于java的游戏服务器。我在服务器端的设计如下。
RuleEnforcer 在 IPlayer 列表中传递,并启动与玩家的通信。 IPlayers 是一个界面,我想象实现一个用于测试目的的虚拟播放器、一个“智能”播放器,以及一个最终与远程客户端 UI 界面交互的播放器。在RuleEnforcer中,当调用player方法时,需要确保该方法(按时)返回。例如:
for(player : players) {
player.giveAcard(card);
}
giveACard没有返回类型,每个玩家只需保存卡片并立即返回即可。但如果玩家实现在方法调用上 hibernate ,游戏就会卡住。 我如何在我的代码中解释这一点?我能想到的一种方法是在不同的线程中调用玩家交互,并使用等待。有没有适合这种场景的设计,或者我的方法是错误的?
最佳答案
是的,你可以通过这种方式创建。 创建一个构造函数
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)
关于java - 我们可以为java接口(interface)实现强制超时吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28855577/