簡體   English   中英

阻止對Jetty服務器的請求

[英]Blocking Request to Jetty Server

如果我有一個客戶端從Jetty服務器請求數據:

private static MessageBean fetchMessage(final String host, final int hostPort, final String path) {
  return client.target(String.format("http://%s:%d/%s", host, hostPort, path))
      .request(MediaType.APPLICATION_JSON_TYPE)
      .get(new GenericType<StateMessageBean>() {
      });
}

那我想要以下行為:

當布爾變量為false時,我希望Jetty Server不發送任何內容,客戶端無限制地阻塞,直到布爾變量為真。 否則我希望Jetty Server發送回復。

為了更好地理解我的問題,我希望它看起來像這樣的服務器方法的代碼:

  @GET()
  @Path("/message")
  @Produces(MediaType.APPLICATION_JSON)
  public MessageBean getMessage() {
    final MyStore<String, String> myMessageStore = ...
    String message = messageStore.readMessage();

    boolean messageState = myMessageStore.readBoolean(); 

    if(messageState)
    return new StateMessageBean(message);
    else
    //return something in order for the client to block infinitely
}

或者,為了讓jetty服務器不發送任何內容並讓客戶端等待,我還缺少另一種模式嗎? 提前致謝。

你可以這樣做:

while(!messageState) {
    Thread.sleep(1000);
    messageState = myMessageStore.readBoolean();
}

但是這不建議用於Web服務器,因為工作線程很快就會耗盡。 如果您想拒絕為客戶提供服務,那么您應立即返回403或其他內容。 否則你可以在防火牆級別上進行DROP,但是,當然,將此防火牆決策連接到messageState變量可能並不簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM