如何在 Dropwizard/Jersey 中保持长 运行 的 HTTP 连接?

How to keep a long-running HTTP connection alive in Dropwizard/Jersey?

我有一个简单的休息端点,它正在 Kafka 主题中搜索消息。根据 when/if 是否找到此消息,此过程可能需要几分钟时间。当我通过 Swagger 调用此端点时,我最终收到 504 - Server Timeout 返回。我怎样才能使这个连接保持活动状态,这样客户端就不会收到超时?

Dropwizard 会让您配置 idleTimeout(默认为 30 秒),请参阅 configuration reference

但我必须警告你这是一条危险的道路,存在以下问题:

  1. 排空连接池
  2. 将终止连接的网络问题
  3. 将终止连接的中间件(如负载平衡器)

如果您的流程需要更多时间,那么有一些解决方案,例如: 1. Websockets(操作完成时通知客户端) 2.长轮询(周期性轮询服务器完成结果)