如何在 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. Websockets(操作完成时通知客户端)
2.长轮询(周期性轮询服务器完成结果)
我有一个简单的休息端点,它正在 Kafka 主题中搜索消息。根据 when/if 是否找到此消息,此过程可能需要几分钟时间。当我通过 Swagger 调用此端点时,我最终收到 504 - Server Timeout
返回。我怎样才能使这个连接保持活动状态,这样客户端就不会收到超时?
Dropwizard 会让您配置 idleTimeout(默认为 30 秒),请参阅 configuration reference
但我必须警告你这是一条危险的道路,存在以下问题:
- 排空连接池
- 将终止连接的网络问题
- 将终止连接的中间件(如负载平衡器)
如果您的流程需要更多时间,那么有一些解决方案,例如: 1. Websockets(操作完成时通知客户端) 2.长轮询(周期性轮询服务器完成结果)