在 Netty 中,ChannelHandlerContext.fireChannelRead()当您想要将控制权移交给下一个处理程序时,您可以调用您的处理程序。这些文档的编写风格有点尴尬,有时很难获得预期的要点,这常常让我想知道一个方法应该做什么(即使在查阅了 Javadoc 之后)。对于这个方法,我特别想知道它应该指示什么样的事件。Javadoc 说
Channel 收到一条消息
从使用它的处理程序的角度来看,这确实没有意义。当然频道已经收到消息了;处理程序已经知道,既然它已经收到了它,那为什么还要告诉上下文呢?这让我认为调用这个方法有不同的含义,但是:
对我来说,使用类似的方法通知上下文会更有意义handlerFinishedRead()。然后fireChannelRead()保留给管道调用。
我同意你的观点,命名fireChannelRead()可能并不理想。我认为考虑这个问题的一个好方法是该方法触发管道中channelRead()下一个方法。ChannelInboundHandler它有效地将消息传递到管道中的下一个 ChannelHandler。
查看 的源代码SimpleChannelInboundHandler,您会发现它决定是否使用消息,然后调用channelRead0来处理它或fireChannelRead()不处理它,而是将其传递给管道中的下一个处理程序。
https://github.com/netty/netty/blob/deb34a0f8bf719b86aa68f9a242b94db78e9172b/transport/src/main/java/io/netty/channel/SimpleChannelInboundHandler.java#L92-L109
针对您列出的该方法的可能含义,我想说它是别的东西。它不一定是“此处理程序已从通道读取(过去时)消息并已完成”,因为此处理程序可能不关心该消息。我想,它也可能有与消息相关的排队工作,但没有“完成”消息,这取决于您对完成的定义。我也不会将其描述为“下一个处理程序可以随意从通道读取消息”。因为我不认为这是一种同步机制。在下一个处理程序上调用channelRead 方法。
| 归档时间: |
|
| 查看次数: |
1699 次 |
| 最近记录: |