两个版本,序列化问题疑惑
在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的配置方式,则无法收到消息,非常奇怪。
netty4与netty5序列化问题记录
原文地址:https://www.cnblogs.com/stevenlii/p/8523663.html