默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
新手请教怎么用netty方便地发送消息?
阅读(32016) | 评论(2 收藏 淘帖
看书和网上的例子都是 写一个类继承
ChannelInboundHandlerAdapter,在channelActive 方法理用 ChannelHandlerContext.writeAndFlush 发送消息,然后就没了。那怎么可以像@Autowired那样或者调用静态方法一样去发消息呢,没找到什么方法,试了图中方式一,把ctx赋给全局变量,然后把这个handler注册为一个bean然后@Autowired进来调用write方法,结果服务端收不到消息,试了把ctx存在一个类里,调用send方法再拿出来也是服务端收不到,请问要怎么办


public class ZLCNettyClientHandler extends ChannelInboundHandlerAdapter {
        
        private ChannelHandlerContext ctx;

        public void write(final ZPE zpe) {
                // 1
                this.ctx.writeAndFlush(Unpooled.copiedBuffer(ZPU.wanzhangbytearray(ZPU.serialize(zpe))));
               
                // 2
                CTXC.get().writeAndFlush(Unpooled.copiedBuffer(ZPU.wanzhangbytearray(ZPU.serialize(zpe))));
                System.out.println("s.ctx.hid = " + System.identityHashCode(CTXC.get()));
        }

        @Override
        public void channelActive(final ChannelHandlerContext ctx) throws Exception {
                // 1
                this.ctx = ctx;
               
                // 2
                CTXC.set(ctx);
               
                System.out.println("channelActive.ctx.hid = " + System.identityHashCode(ctx));
                System.out.println(Thread.currentThread().getName() + "\t" + LocalDateTime.now() + "\t"
                                + "ZLCNettyClientH.channelActive()");
                System.out.println();
               
                final ZPE zpe = zpe("A1", ZPEOperationTypeEnum.STRING, ZPEOperationSTypeEnum.LENGTH);
                final byte[] wan = ZPU.wanzhangbytearray(ZPU.serialize(zpe));
                System.out.println("ZLCNettyClientH.wan = " + Arrays.toString(wan));
                ctx.writeAndFlush(Unpooled.copiedBuffer(wan));
                System.out.println("ZLCNettyClientH.ctx.writeAndFlush(Unpooled.copiedBuffer(wan));");


        }

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!下一篇:脑残式网络编程入门(九):面试必考,史上最通俗大小端字节序详解
推荐方案
评论 2
把Channel用一个全局的对象保存起来,网上的demo只是经你演示通信原理。

你是想打算开发IM吗?
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部