【问题标题】:Blocking Request to Jetty Server阻止对 Jetty 服务器的请求
【发布时间】:2019-06-17 18:51:26
【问题描述】:

如果我有这样的客户端从 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>() {
      });
}

那么我想要以下行为:

当布尔变量为假时,我希望 Jetty 服务器不发送任何内容,客户端无限阻塞,直到布尔变量为真。否则我希望 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
}

或者为了让码头服务器不发送任何内容而让客户端等待,我是否缺少另一种模式? 提前致谢。

【问题讨论】:

    标签: java jetty


    【解决方案1】:

    你可以这样做:

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

    但这不建议用于 Web 服务器,因为工作线程会很快用完。如果您想拒绝为客户提供服务,那么您应该立即返回 403 或其他内容。否则,您可以在防火墙级别进行 DROP,但是,当然,将此防火墙决策连接到您的 messageState 变量可能并非易事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2019-01-18
      • 2017-06-06
      • 2012-03-12
      • 1970-01-01
      • 2021-05-24
      • 2021-05-15
      相关资源
      最近更新 更多