zoukankan      html  css  js  c++  java
  • netty4与netty5序列化问题记录

    两个版本,序列化问题疑惑

    在netty4上,使用序列化

    Netty4.x实战(二) 对象传输 - 程序园
    http://www.voidcn.com/article/p-hwrhqscn-bau.html

    源码下载:

    stevenlii/Socket_Netty
    https://github.com/stevenlii/Socket_Netty

    其中关键代码:

    server.java

    package bhz.netty.serial;
    
    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.ChannelFuture;
    import io.netty.channel.ChannelInitializer;
    import io.netty.channel.ChannelOption;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.channel.socket.nio.NioServerSocketChannel;
    import io.netty.handler.codec.serialization.ClassResolvers;
    import io.netty.handler.codec.serialization.ObjectDecoder;
    import io.netty.handler.codec.serialization.ObjectEncoder;
    import io.netty.handler.logging.LogLevel;
    import io.netty.handler.logging.LoggingHandler;
    
    public class Server {
    
        public static void main(String[] args) throws Exception{
            
            EventLoopGroup pGroup = new NioEventLoopGroup();
            EventLoopGroup cGroup = new NioEventLoopGroup();
            
            ServerBootstrap b = new ServerBootstrap();
            b.group(pGroup, cGroup)
             .channel(NioServerSocketChannel.class)
             .option(ChannelOption.SO_BACKLOG, 1024)
             //设置日志
             .handler(new LoggingHandler(LogLevel.INFO))
             .childHandler(new ChannelInitializer<SocketChannel>() {
                protected void initChannel(SocketChannel sc) throws Exception {
                    sc.pipeline().addLast(new ObjectDecoder(Integer.MAX_VALUE, ClassResolvers.cacheDisabled(null)));
                    sc.pipeline().addLast(new ObjectEncoder());
                    sc.pipeline().addLast(new ServerHandler());
                }
            });
            
            ChannelFuture cf = b.bind(8765).sync();
            
            cf.channel().closeFuture().sync();
            pGroup.shutdownGracefully();
            cGroup.shutdownGracefully();
            
        }
    }

    使用如下方式序列化

    sc.pipeline().addLast(new ObjectDecoder(Integer.MAX_VALUE, ClassResolvers.cacheDisabled(null)));
                    sc.pipeline().addLast(new ObjectEncoder());

    而在netty5上,使用如下方式

    sc.pipeline().addLast(MarshallingCodeCFactory.buildMarshallingDecoder());
                    sc.pipeline().addLast(MarshallingCodeCFactory.buildMarshallingEncoder());

    其中引用的是(https://github.com/stevenlii/Socket_Netty/blob/master/pom.xml)

    <!-- https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling -->
            <dependency>
                <groupId>org.jboss.marshalling</groupId>
                <artifactId>jboss-marshalling</artifactId>
                <version>2.0.4.Final</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling-serial -->
            <dependency>
                <groupId>org.jboss.marshalling</groupId>
                <artifactId>jboss-marshalling-serial</artifactId>
                <version>2.0.4.Final</version>
                <scope>test</scope>
            </dependency>

    详细方式在

    基于netty的Marshalling序列化框架简单实现 - 简书
    https://www.jianshu.com/p/bacdc610f557

    也可以找到

    疑惑:

    如果在4上使用5的配置方式,则无法收到消息,非常奇怪。

     


  • 相关阅读:
    C#小数点位数处理方法
    C#获取硬盘空间信息
    Linux双网卡绑定实现负载均衡
    CentOS、Ubuntu配置网卡子接口
    CentOS7修改网卡名称,禁用ipv6
    centos命令自动补全增强
    使用批处理文件访问ORACLE数据库
    Mac 常用终端命令
    常用正则表达式
    pickle 模块
  • 原文地址:https://www.cnblogs.com/stevenlii/p/8523663.html
Copyright © 2011-2022 走看看