3

与 boost.asio 不同,netty 没有 read-like 方法。在以下情况下不方便:一个管理节点管理一些节点,客户端连接到管理节点以检索驻留在节点中的信息。管理节点收到客户端请求后,向对应节点发送请求,等待节点响应。当节点响应和管理节点在其'messageReceived'函数中获取信息时,如何将信息发送到属于客户端的通道?它需要向客户端请求的处理程序发送一个事件。

1.获取客户端请求

2.向节点发送请求

3.读取该节点的响应

4.向客户端发送响应

所有这 4 个步骤都可以在 boost.asio 中的一个函数中完成。但是netty不支持step3,read函数是独立的,用户不能直接调用。唯一的方法是在管理节点和节点之间的处理程序中接收到响应后,将其重新发送到管理节点和客户端之间的处理程序。这样做的典型方法是什么?

4

1 回答 1

3

Netty 使用异步 i/o 操作,因此第 2 步是异步的,是的,在第 3 步之前你不能阻塞。

在大多数情况下,(不是特定于 Netty)你可以做的是:
1)为你的请求提供唯一的 id,节点应该在他们的响应中回显唯一的 id。
2)将它们存储在哈希图中,键为请求的唯一ID,通道(管理节点和客户端之间)为其值
3)当您收到管理节点中节点的响应时,您可以使用唯一ID从哈希图中查找通道然后将响应发送给客户端。

您还可以查看 Bruno de carvalho 的 Netty负载均衡器,它将为您提供对同一问题的另一个视角。他使用隧道来达到同样的效果。

于 2011-11-23T15:41:23.020 回答