0

特定の値をポーリングするタイマー タスクを含むジャージー サービスがあります。ポーリングから特定の値を取得した場合にのみ応答を返したいです。それを達成する方法はありますか?

私のコードは次のとおりです。

@Path("/poll")
public class PollService{
    String response = null;
    @GET
    @Produces(javax.ws.rs.core.MediaType.TEXT_PLAIN)
    public String pollResponse(@Context HttpServletRequest request){
       MyTimer poller = new MyTimer();
       final Timer timer = new Timer();
       timer.scheduleAtFixedRate(poller, 0, 5000);
       return response;
    }
    private class MyTimer extends TimerTask{
         @Override
         public void run(){
             //Poll
             //Change value of response upon condition
         }
    }

「response」変数の値が「SUCCESS」に設定されるまで、サービスが値を返さないようにします。それを達成するために私は何をすればよいですか?

4

2 に答える 2

1

あなたが取るかもしれないアプローチの1つ:

  1. リクエストを 2 つのリクエストに分割する
  2. 最初のリクエストはリクエストを受け入れ、202 Accepted レスポンスを返します。202 resposne は、非同期タスクの結果をポーリングするためのステータス/ポーリング URL を提供します
  3. 2 番目の要求は、提供されたステータス/ポーリング URL をポーリングします。それに対して、ボディ IN_PROGRESS で 200 OK として応答を返すか、終了した場合は実際のタスクの結果を返すことができます。
于 2013-10-09T05:56:01.777 に答える