2017-05-31 41 views
0

Java EE对我来说是一个巨大的问题,并且我在一天前已经提出了一个类似的问题,但没有得到任何适当的回应。Java EE以毫秒为间隔发送一个定时器发送数据包

简而言之,我想为我的GlassFish服务器制作一个计时器循环,它将持续向通过websocket连接的任何客户端发送信息包。

我希望这发送数据包一个LOT(每几毫秒),因为这是一个游戏的实现。

我看过一个使用@Schedule注释的建议,但是每秒最多只有一次,这对我所做的事情来说是不够的。

我在网上看过,但我甚至不知道用什么关键字来找到我在找的东西。有小费吗?

+0

您是否每x毫秒就向所有玩家发送一次游戏状态快照,或者您是否在玩家执行某个动作时立即发送消息。如果你发送快照,你需要一个定时器,如果你推送消息你不需要定时器(但你可能需要额外的线程来发送消息)。为了回答您如何实现计时器,我们需要知道游戏是否分布在多个服务器上,或者如果您只需使用Java中的Timer类来触发每次推送。 –

回答

0

您可以使用TimerService@Timeout注释以毫秒间隔工作。

package my.example; 

import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.ejb.Singleton; 
import javax.ejb.LocalBean; 
import javax.ejb.Startup; 
import javax.ejb.Timeout; 
import javax.ejb.Timer; 
import javax.ejb.TimerService; 

@Singleton 
@LocalBean 
@Startup 
public class IntervalTest { 
    @Resource 
    private TimerService timerService; 

    @PostConstruct 
    private void init() { 
     // Start after 1 seconds, subsequently every 50 milliseconds 
     timerService.createTimer(1000, 50, "IntervalTest"); 
    } 

    @Timeout 
    public void execute(Timer timer) { 
     // do something 
    } 
} 
+0

谢谢,但现在我遇到了另一个问题。我不能在这个Bean上使用@Startup我正在实例化将发送数据包。它一直告诉我,我不能实例化一个可以运行到异常的单例,但我需要抛出异常以便将JsonObjects发送到我的websocket。有小费吗? –

相关问题