阻止对码头服务器的请求



如果我有一个客户端从码头服务器请求数据,如下所示:

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 不发送任何内容,并且客户端无限阻塞,直到布尔变量为 true。否则,我希望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
}

还是我缺少另一种模式,以便码头服务器不发送任何内容并让客户端等待?提前谢谢。

你可以做这样的事情:

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

但不建议对 Web 服务器这样做,因为工作线程很快就会用完。如果你想拒绝向客户端提供服务,那么你应该立即返回403或其他东西。否则,您可以在防火墙级别上丢弃,但是,当然,将此防火墙决策连接到messageState变量可能并非易事。

最新更新