如何在 Netty 客户端匹配对请求的响应?
How to match responses to requests in Netty client?
我正在使用 Netty 实现一个 http 客户端应用程序。任务是将相同的请求发送到多个端点并收集答案以供进一步处理。许多这样的请求可以同时发送到相同的端点。问题是将从一个端点收到的响应与请求相匹配。
一种可能的解决方案是为每个请求创建一个新的处理程序(和管道),如此处所述。在这种情况下,请求可以映射到处理程序,处理程序可以存储响应。但这意味着为每个请求创建新连接,这会降低性能。
我也不想更改协议并在 requests/responses 中包含请求 ID 仅用于匹配目的。
如果客户端和服务器都遵守 HTTP 流水线语义,则服务器必须按顺序响应请求。因此,对于每个连接,您可以维护一个请求队列。每个新请求都在队列的后面,每个响应从队列的前面弹出它的匹配请求。
如果连接失败,队列还会为您提供已发送但您尚未收到响应的请求列表。然后,您可以对每个请求采取适当的错误纠正措施。
我正在使用 Netty 实现一个 http 客户端应用程序。任务是将相同的请求发送到多个端点并收集答案以供进一步处理。许多这样的请求可以同时发送到相同的端点。问题是将从一个端点收到的响应与请求相匹配。
一种可能的解决方案是为每个请求创建一个新的处理程序(和管道),如此处所述。在这种情况下,请求可以映射到处理程序,处理程序可以存储响应。但这意味着为每个请求创建新连接,这会降低性能。
我也不想更改协议并在 requests/responses 中包含请求 ID 仅用于匹配目的。
如果客户端和服务器都遵守 HTTP 流水线语义,则服务器必须按顺序响应请求。因此,对于每个连接,您可以维护一个请求队列。每个新请求都在队列的后面,每个响应从队列的前面弹出它的匹配请求。
如果连接失败,队列还会为您提供已发送但您尚未收到响应的请求列表。然后,您可以对每个请求采取适当的错误纠正措施。