0

これは解決された問題だと思うが、私のgoogle-fuは十分ではなかった。クライアントをフラッディングせずに更新イベントをプッシュします。これを行うにはクリーンな方法?

私は、複数のもののステータスを追跡するテーブルを持っています。サーバーは自由に変更をクライアントにプッシュできます。

問題はです。最後の更新が5秒未満であれば、更新をプッシュしたくありません。

他のイベントマネージャスレッドを作成せずにこれを達成する最もクリーンな方法は何ですか?

私の現在の刺し傷は、次のようになります。

pushEvent(){ 
    Look up the last update time 
    if: last update less than 5 sec ago 
     then do nothing 
    else 
     pushToClients 
} 

それはほとんどの部分には十分に機能しますが、明らかに最後の更新をunpushedままにすることができます。

これを行う良い方法は何ですか?私が考えてい いくつかの方法:アップデートがすでにスケジュールされている場合

  1. は、すべてのプッシュ(例えばのThread.sleep)に私は 確認することができ、そのように5秒の遅延を追加します。理想的ではありませんが、誰もが 気になりません。
  2. プッシュを行い、次にdoNotPush = trueに設定します。タイマーを使用して をfalseに戻します。

おかげで、

答えて

0

サーバーでは、キーなどの値とイベントのた受信者(クライアント)としてペア{current event, last sent event}が含まれていますHashMapを使用することができます。次に、このマップを繰り返し実行する予定の定期タスクを使用して、current event != last sent eventかどうかをチェックし、そうであれば、現在のイベントをクライアントに送信します(last sentに入れます)。

クライアントへの送信が遅い場合、発信キューにイベントが混在している可能性があります。これを回避するには、非同期に送信します(別のExecutorに送信するイベントをオフロードするなど)。

関連する問題