Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • Netty IMdemo

    post by onelong / 2015-9-22 16:06 Tuesday [java]

    Netty 4和Netty 3很不同,以前写过Netty 3的demo,现在写Netty 4有点吃力。单纯用socket来通讯,要自己定协议来处理粘包,而Netty帮你处理好了,你只需要会用就可以了。例如:

    public class IMChannelInitializer extends ChannelInitializer<SocketChannel> {

    private final ChannelInboundHandlerAdapter mChannelInboundHandlerAdapter;

     

    public IMChannelInitializer(ChannelInboundHandlerAdapter handlerAdapter)

    {

    mChannelInboundHandlerAdapter=handlerAdapter;

    }

     

    @Override

    protected void initChannel(SocketChannel ch) throws Exception {

    ChannelPipeline pipeline = ch.pipeline();

    pipeline.addLast("frameDecoder",

    new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE,

    0, 4, 0, 4));

    pipeline.addLast("frameEncoder",

    new LengthFieldPrepender(4));

    pipeline.addLast("decoder", new BytesDecoder());

    pipeline.addLast("encoder", new BytesEncoder());

    pipeline.addLast(mChannelInboundHandlerAdapter);

    }

     

    }

    注册解码器的时候要注意顺序,frameDecoder和frameEncoder主要是处理粘包。如果在多语言环境下通讯,需要了解具体的原理。

    encoder和decoder主要是处理上层协议的,如果你用protobuf,你可以在这里做些特殊处理,不多说了。

    demo 代码  https://git.oschina.net/onelong/IMBase

    现在只实现了一套json的协议

    标签: java
    引用地址:
     

    我要评论