2017-05-31 5 views
0

Java EEは私にとって巨大なものですが、私はすでにまさに似たような質問をちょうど1日前にしましたが、適切な回答は得られませんでした。Java EEパケットを送信するためのミリ秒間隔のタイマーを作成してください

簡単に言えば、Websocket経由で接続されているクライアントに情報パケットを連続的に送信するGlassFishサーバーのタイマーループを作成したいとします。

これは、ゲームの実装用であるため、パケットをたくさん(数ミリ秒ごとに)送信したいと考えています。

私は@Schedule注釈を使用する1つの提案を見てきましたが、最大で1秒に1回の回数しかありません。これは私がやっていることには不十分です。

私はウェブを見てきましたが、私はJavaで探しているものを見つけるためにどのようなキーワードを使用するか分かりません。任意のヒント?

+0

ゲームの状態のスナップショットをすべてのプレーヤーにミリ秒ごとに送信しますか、プレーヤーがアクションを実行したときにすぐにメッセージを送信しますか?スナップショットを送信する場合は、タイマーが必要です。メッセージをプッシュする場合は、タイマーは必要ありませんが、メッセージを送信するには追加のスレッドが必要な場合があります。タイマーの実装方法に答えるには、ゲームが複数のサーバーに分散されているかどうかを知る必要があります。また、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に送るために例外をスローする必要があります。任意のヒント? –

関連する問題