当前位置: 首页 > 面试题库 >

netty中的ctx.write()和ctx.channel()。write()有什么区别?

花阳辉
2023-03-14
问题内容

我注意到ctx在处理程序之间是不同的,即使这些处理程序位于同一管道中,例如

    p.addLast("myHandler1", new MyHandler1());
    p.addLast("myHandler2", new MyHandler2());

在MyHander1中

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    System.err.println("My 1 ctx: " + ctx + " channel: " + ctx.channel());
    super.channelRead(ctx, msg);
}

在MyHandler2中

@Override
protected void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    System.err.println("My 2 ctx: " + ctx + " channel: " + ctx.channel());
}

和输出:

My 1 ctx: io.netty.channel.DefaultChannelHandlerContext@ba9340 channel: [id: 0xdfad3a16, /127.0.0.1:60887 => /127.0.0.1:8090] 
My 2 ctx: io.netty.channel.DefaultChannelHandlerContext@1551d7f channel: [id: 0xdfad3a16, /127.0.0.1:60887 => /127.0.0.1:8090]

我注意到ctx不同,但频道相同

所以在调用ctx.write()和ctx.channel()。write()之间有什么区别吗?


问题答案:

是的,有…
Channel.write(..)始终从ChannelPipeline的尾部开始,因此通过所有ChannelOutboundHandlers。ChannelHandlerContext.write(…)从绑定到ChannelHandlerContext的ChannelHandler的当前位置开始,因此仅传递在其前面的ChannelOutboundHandlers。



 类似资料:
  • 我注意到ctx在处理程序之间是不同的,即使这些处理程序在相同的管道中,例如 在MyHander1中 那么调用ctx.write()和ctx.channel().write()有什么区别吗?

  • 想知道是不是一样(在my handler . message received(channelhandler context CTX,object msg)中调用它们)。 如果是相同的,我可以执行以下操作吗 1)将通道添加到哈希图 2)在另一个客户端的其他处理程序中,向最后一个客户端发送消息: 对不起,如果我表达得不好,我不是英国人。感谢您的帮助:)

  • 有人知道Netty中channelActive和channelRead之间的区别吗? 我通过阅读netty用户指南(https://netty.io/wiki/user-guide-for-4.x.html)来学习netty 我尝试编写一个回显服务器,下面是我的入站。 我已经启动了我的echo服务器,当我尝试使用服务器的IP地址和端口telnet时,除了消息:“丢失到主机的连接”之外,没有任何输出

  • 问题内容: 该java.io.Writer的接口有两个方法称为追加和写入。两者之间有什么区别?它甚至说 这种形式的方法的调用的行为与调用的行为完全相同 那么拥有两个方法名称变体的原因是什么? 问题答案: append()和write()之间有细微的差别。您可以通过阅读Javadocs来解决所有这些问题。暗示。;) write将只接受一个不能为null的String并返回 append将采用任何可以

  • 我想知道是否有可能在netty中抢占先前的writeAndFlush。即,我如何在netty消息中启用一些优先级?如果在writeAndFlush中不太可能强制执行这个优先级,那么有没有可能用eventloop来处理?

  • 问题内容: 我一直认为Java 中的运算符用于验证其两个布尔操作数是否均为,并且该&运算符用于对两种整数类型进行按位运算。 最近我知道,也可以使用运算符来验证其两个布尔操作数是否均为,唯一的区别是即使LHS操作数为false,它也会检查RHS操作数。 Java中的运算符是否在内部重载?还是在这背后有其他概念? 问题答案: <-验证两个操作数 <-停止评估第一个操作数是否为false,因为结果为fa