为了账号安全,请及时绑定邮箱和手机立即绑定

在 netty 编码器中获取 Stackoverflow

在 netty 编码器中获取 Stackoverflow

蛊毒传说 2021-11-17 15:35:59
我想在发送实际消息之前发送我自己的自定义消息,第一次初始化频道。我有:public class MyClientInitializerFactory extends ClientInitializerFactory {@Overrideprotected void initChannel(Channel ch) {    ChannelPipeline pipeline = ch.pipeline();    pipeline.addLast(new EncoderTwo());    pipeline.addLast(new EncoderOne());}}编码器一:public class EncoderOne extends MessageToMessageEncoder<Object> {@Overrideprotected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {    byte[] bytes = "ABCD".getBytes(StandardCharsets.UTF_8);    ByteBuf byteBuf = Unpooled.buffer(bytes.length);    Channel channel = ctx.channel();    channel.writeAndFlush(byteBuf);    out.add(msg); // retaining original message for further processing    ctx.pipeline().remove(this);}EncoderTwo 处理实际消息并将其通过网络发送,但我的消息从未到达那里。当我尝试发送任何内容时,这些行会一遍又一遍地执行,直到我得到 StackOverflow: ByteBuf byteBuf = Unpooled.buffer(bytes.length); Channel channel = ctx.channel(); channel.writeAndFlush(byteBuf);我做错了什么?
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

问题是你调用channel.writeAndFlush(byteBuf);了编码器,这意味着它会再次从尾部开始流过管道,然后再次进入你的编码器。因此,要么在调用之前先删除编码器,要么调用ctx.writeAndFlush(...)

另一种选择是也直接将 the 添加byteBuf到 outList以及 then call flush()


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信