当前位置: 首页 > 知识库问答 >
问题:

如何从正常流之外访问Netty处理程序方法

公良高刚
2023-03-14

我正在尝试将Netty(版本3.6.1.final)集成到我们当前的系统中,这样我就可以替换当前的NIO代码

在我的Netty business logic处理程序的messageReceed()方法中,我将向总线添加一个输入请求。我将传递的一件事是Netty事件消息中的数据。

我认为应该在这个InputEvent中传递ChannelHandlerContext以及接收的数据/消息。以便最终在处理OutputEvent时,它可以使用最初传递的ChannelHandlerContext将处理后的数据通过正确的Netty通道发送回请求客户端。

那么,正在处理OutputEvent的输出任务如何绑定回Netty呢?

public void messageReceived(
        ChannelHandlerContext ctx, MessageEvent e) {

    byte[] message = (byte[])e.getMessage();

    try {
            data.add(message);
        }
    catch( IOException ioe )
        {
            logger.error(ioe);
        }

    InputEvent ie = new InputEvent( ctx, this, data.getBuffer() );

    try {
              bus.enqueue(ie);
    }
    catch( Exception ex )
   {
      logger.error(ex);
   }
public void run() {


    // note that the OutputEvent (event) is available here.  This is not a Netty event.
    ChannelHandlerContext ctx = event.getHandlerContext();
    ClientChannel handler = event.getHandler();

    // I need to send the data in event.getBuffer() back.

// Now what do I do here???


…
…
…

}

谢谢你。

共有1个答案

史绍晖
2023-03-14

你只要打电话:

InputEvent event = ...
ChannelHandlerContext ctx = ....
ctx.write(event.getBuffer());

或:

InputEvent event = ...
Channel channel = ....
channel.write(event.getBuffer());
 类似资料:
  • 我有以下情况,我试图看看是否有解决方案: 两个Spring服务调用必须并行进行(一个是现有的服务调用/逻辑,另一个是新添加的服务调用) 然而,一条快乐的道路应该是直截了当的,当涉及到服务发出的错误时,应该遵守以下规则: > 如果其中只有一个失败,则通过另一个服务(异步)记录错误,并且API只返回成功服务的结果--这可以通过相应的线程来完成。 我的问题是,因为这些服务返回某个对象的列表,即使我使用并

  • 由于预设审批人退出企业,导致模版自动停用时,可以在“异常处理”页面进行相应操作。

  • 问题内容: 任何人都可以澄清一下下面的过程是否是正确的处理流程流的方法,而没有任何流缓冲区已满和阻塞问题 我正在从Java程序中调用外部程序,正在使用ProcessBuilder来构建流程,执行之后 我正在使用一种方法来处理流程 在我的方法中,我试图处理流程流 readStream方法用于读取我的流文本。 问题答案: 不,那不是正确的方法。 首先,在某些系统上,您的代码将永远停留在调用中,因为该过

  • 我试图通过“网络在行动”这本书来掌握网络概念。 在我看来,有几个概念解释得不太好或太模糊。因此,我想我会来这里就这些话题做一些明确的解释。 渠道管道: 所以我有一个这样的渠道管道: 对于channelInitializer,从概念上讲,我会假设该过程将按以下顺序进行:

  • 我正在使用netty构建一个应用程序。在应用程序中,我需要处理传入和传出的消息。要求是应用程序将发送的任何消息都应由特定的处理程序处理,进入应用程序的任何消息都应由另一个特定的处理程序处理。但是,我希望在两个处理程序之间交换消息,以便能够跟踪发送的消息响应,因为请求消息也将发送到应用程序。 请任何想法hwo实施这样的要求。这个问题听起来可能不相关,但这就是我得到的,我还不是一个网络极客。我读到的关

  • 问题内容: 用Java产生和使用外部进程的流(IO)的正确方法是什么?据我所知,由于可能的缓冲区大小有限,因此应在与生成进程输入并行的线程中使用java结束输入流(进程输出)。 但是我不确定我是否最终需要与这些使用者线程进行同步,或者仅等待进程退出以使用方法就足够了,以确保所有进程输出实际上都被消耗了?IE是否有可能,即使进程退出(关闭其输出流),流的Java端仍存在未读数据?实际如何知道该过程何