netty - 如何将事件发送给 netty 中的其他处理程序?

标签 netty

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

1.获取客户端请求

2.向节点发送请求

3.读取该节点的响应

4.向客户端发送响应

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

最佳答案

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

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

你也可以看看 Bruno de carvalho 的 Netty load balancer这将使您对同一问题有不同的看法。他使用隧道来达到同样的效果。

关于netty - 如何将事件发送给 netty 中的其他处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8237302/

相关文章:

java - 服务器使用 websocket 和 netty 发送问候消息 -> 导致异常

java - Netty 4 从客户端创建多个连接

java - 找不到 TLS ALPN 提供商;没有可用的 netty-tcnative、Conscrypt 或 Jetty NPN/ALPN

Redis - 整数列表

tcp - 当 TCP 连接数超过 65000 时服务器发送 RST 给客户端~

java - async-http-client 请求与 NettyAsyncHttpProvider 超时

java - 异步编程在 Netty 中是如何工作的?它会让事情变得更健谈吗?

java - 用于连接超时和打开连接数的 Netty channel 配置

java - Netty - 如何获得所有客户 channel ?

java - 有没有办法从 ratpack ctx.next() 获得 Promise