`

netty自定义解码器

阅读更多
ByteToMessageDecoder

public class CustomDecoder extends ByteToMessageDecoder {

protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List<Object> list) throws Exception {
        try {
            ByteBuffer buffer = buf.nioBuffer();
            int length = buffer.limit();
            byte[] data = new byte[length];
            buffer.get(data);
           
            String json = new String(data, "utf-8");
            System.out.println("json:"+json);
            if(!json.startsWith("{")) {
            return ;
            }
            User user = JSON.parseObject(json, User.class);
            list.add(user); //解码成User对象,从ByteBuf里读取字节流
        } catch (Exception e) {
        e.printStackTrace();
        }
}
}

public class NettyServer {
private int port=8088;

public static void main(String[] args) {
NettyServer server = new NettyServer();
server.run();
}

void run() {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
public void initChannel(SocketChannel ch) {
ChannelPipeline p =ch.pipeline();
p.addLast(new CustomDecoder()); //handler里的Object msg可以转换成解码后的对象
p.addLast(new SeverHandler());
}}
).option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture f = b.bind(port).sync();
f.channel().closeFuture().sync();
}catch(Exception e) {
e.printStackTrace();
}finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}

public class SeverHandler extends ChannelInboundHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.writeAndFlush("this is a test!");
User user = (User)msg;
System.out.println("user: "+JSON.toJSONString(user));
}
}
0
0
分享到:
评论

相关推荐

    Netty4编写服务器客户端,自定义编解码,发送自定义消息

    根据给定的消息协议,自己定义一个消息类,编写好服务端与客户端,自定义好编解码器,在客户端发送此消息,服务端获取消息并向客户端发送同样格式的消息;导入Eclipse maven项目运行即可跑通。

    netty自定义数据包协议

    netty自定义数据包协议示例 ,自定义解码器译码器 解决拆包粘包问题

    netty-frameDecoder:换行符,自定义分隔符,定长度解码器

    netty-frameDecoder换行符,自定义分隔符,定长度解码器说明使用tcp传送数据,由于缓存区大小的设置,MSS的tcp分段等因素,数据传输时会出现TCP粘包/拆包的问题。但是底层的tcp无法理解上层的业务数据,所以在底层也...

    netty服务器解析16进制数据

    netty服务器解析16进制数据

    Netty+自定义Protobuf编解码器

    自定义Protobuf的编解码器,和官方的只能发送一个消息格式比较,能发送多个protobuf对象,protobuf文件夹下有生成protobuf的工具和使用说明

    Netty中Marshalling编解码自定义栈应用

    NULL 博文链接:https://shihuan830619.iteye.com/blog/2265568

    Netty之自定义编解码器.zip

    Netty之自定义编解码器

    93个netty高并发教学视频下载.txt

    86_Netty自定义编解码器与TCP粘包拆包问题;87_Netty编解码器执行流程深入分析;88_ReplayingDecoder源码分析与特性解读;89_Netty常见且重要编解码器详解;90_TCP粘包与拆包实例演示及分析;91_Netty自定义协议与...

    netty案例,netty4.1基础入门篇九《自定义编码解码器,处理半包、粘包数据》源码

    netty案例,netty4.1基础入门篇九《自定义编码解码器,处理半包、粘包数据》源码 ...

    精通并发与netty视频教程(2018)视频教程

    86_Netty自定义编解码器与TCP粘包拆包问题 87_Netty编解码器执行流程深入分析 88_ReplayingDecoder源码分析与特性解读 89_Netty常见且重要编解码器详解 90_TCP粘包与拆包实例演示及分析 91_Netty自定义协议与TCP粘包...

    精通并发与netty 无加密视频

    第86讲:Netty自定义编解码器与TCP粘包拆包问题 第87讲:Netty编解码器执行流程深入分析 第88讲:ReplayingDecoder源码分析与特性解读 第89讲:Netty常见且重要编解码器详解 第90讲:TCP粘包与拆包实例演示及...

    精通并发与 netty 视频教程(2018)视频教程

    85_Netty编解码器剖析与入站出站处理器详解 86_Netty自定义编解码器与TCP粘包拆包问题 87_Netty编解码器执行流程深入分析 88_ReplayingDecoder源码分析与特性解读 89_Netty常见且重要编解码器详解 90_TCP粘包与拆包...

    customcoding.zip

    Netty 自定义编码、解码器案例 适合netty初学者

    基于Netty框架的demo项目

    这是一个基于高并发网络框架-Netty框架的demo项目,旨在展示Netty服务端与客户端的基础使用方式,并深入探讨了自定义编解码器以及心跳机制的实现。本demo紧密结合了本人发布的《初识Netty》一文中的示例,为学习者...

    Netty In Action中文版

    第一章:Netty介绍 第二章:第一个Netty程序 第三章:Netty核心概念 第四章:Transports(传输) ...第十四章:实现自定义的编码解码器 第十五章:选择正确的线程模型 第十六章:从EventLoop取消注册和重新注册

    Netty课程全部课件资料.rar

    十二个实例带你轻松掌握Netty 江...Netty的各种解码器,并利用解码器处理复杂繁琐的粘包/拆包 Netty集成第三方编码解码框架传输POJO对象 掌握Netty的异步处理任务和定时计划任务 掌握自定义业务线程池处理长耗时业务

    Netty工程完整的源码.rar

    十二个实例带你轻松掌握Netty 江...Netty的各种解码器,并利用解码器处理复杂繁琐的粘包/拆包 Netty集成第三方编码解码框架传输POJO对象 掌握Netty的异步处理任务和定时计划任务 掌握自定义业务线程池处理长耗时业务

    《Netty in action》中文版

    第一部分:现在开始 1. Netty 与Java NIO APIs 2. 你的第一个netty应用程式 3. Netty 起源 ...14. 实现一个自定义的编解码器 15. 选择适当的线程模型 16. 采用EventLoop实现注销与再次注册 17. 研究案例

    Netty in Action第五版-英文版

    本书共分为4个部分:第一部分详细地介绍Netty的相关概念以及核心组件,第二部分介绍自定义协议经常用到的编解码器,第三部分介绍Netty对于应用层高级协议的支持,会覆盖常见的协议及其在实践中的应用,第四部分是几...

Global site tag (gtag.js) - Google Analytics