与boost.asio不同,netty没有类似read的方法。以下情况不方便: 管理节点管理一些节点,客户端连接到管理节点以检索驻留在节点中的信息。当管理节点接收客户端的请求时,它向对应节点发送请求并等待节点响应。当节点响应和管理节点在其“messageReceived”函数中获取信息时,如何将信息发送到属于客户端的通道?它需要向客户请求的Handler发送一个事件。
1.get客户请求
2.发送请求到节点
3.读取该节点的响应
4.发送对客户的回复
所有这4个步骤都可以在boost.asio中的一个函数中完成。但是netty不支持step3,读取功能是独立的,用户不能直接调用它。唯一的方法是在管理节点和节点之间的处理程序中接收响应后,将其重新发送到管理节点和客户端之间的处理程序。 这样做的典型方法是什么?
答案 0 :(得分:3)
Netty使用异步i / o操作,因此第2步是异步的,是的,你不能阻止,直到你得到第3步。
在大多数情况下,(不是特定于Netty)你可以做的是:
1)为您的请求提供唯一的ID,节点应该在其响应中回显唯一的ID。
2)将它们存储在散列映射中,其中key作为请求和通道的唯一id(在管理节点和客户端之间)作为其值
3)当您从管理节点中的节点收到响应时,您可以使用唯一ID从hashmap查找通道,然后将响应发送到客户端。
您还可以查看Bruno de carvalho的Netty load balancer,它将为您提供另一个相同问题的视角。他使用隧道效果来达到同样的效果。