一、Netty已经为我们提供了常用协议的处理器,我们直接使用就可以

可以看到包括redis协议,http协议等主流协议的编码解码器,netty都为我们提供了。

二、代码测试

  • 使用netty直接对redis进行操作

redis协议的详细规定,这里不深入

@Slf4j
public class SimpleRedisProtocol {public static void main(String[] args) {final byte[] LINE = {13, 10};NioEventLoopGroup worker = new NioEventLoopGroup();try {Bootstrap bootstrap = new Bootstrap();bootstrap.channel(NioSocketChannel.class);bootstrap.group(worker);bootstrap.handler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) {ch.pipeline().addLast(new LoggingHandler());ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {@Overridepublic void channelActive(ChannelHandlerContext ctx) {ByteBuf buf = ctx.alloc().buffer();buf.writeBytes("*3".getBytes());buf.writeBytes(LINE);buf.writeBytes("$3".getBytes());buf.writeBytes(LINE);buf.writeBytes("set".getBytes());buf.writeBytes(LINE);buf.writeBytes("$4".getBytes());buf.writeBytes(LINE);buf.writeBytes("name".getBytes());buf.writeBytes(LINE);buf.writeBytes("$8".getBytes());buf.writeBytes(LINE);buf.writeBytes("zhangsan".getBytes());buf.writeBytes(LINE);ctx.writeAndFlush(buf);}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf buf = (ByteBuf) msg;System.out.println(buf.toString(Charset.defaultCharset()));}});}});ChannelFuture channelFuture = bootstrap.connect("localhost", 6379).sync();channelFuture.channel().closeFuture().sync();} catch (InterruptedException e) {log.error("client error", e);} finally {worker.shutdownGracefully();}}
}


可以看到,接收到了来自redis服务端的响应,提示需要密码验证

  • http协议测试
/*** @author cristianoxiaoming@gmail.com* @version 1.0* @ClassName HttpProtocol* @Package MyNetty.Netty.protocol* @ProjectName javaStudy* @description Netty内置Http协议测试* @date 2021-09-24 23:40* @ProductName IntelliJ IDEA*/
@Slf4j
public class HttpProtocol {public static void main(String[] args) {NioEventLoopGroup boss = new NioEventLoopGroup();NioEventLoopGroup worker = new NioEventLoopGroup();try {ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.channel(NioServerSocketChannel.class);serverBootstrap.group(boss, worker);serverBootstrap.childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new LoggingHandler(LogLevel.DEBUG));//HttpServerCodec已经包含编码器和解码器,会将http请求解析成两部分(请求头http request和请求行http content)ch.pipeline().addLast(new HttpServerCodec());//对上面编解码器的结果进行处理,使用SimpleChannelInboundHandler,可以让netty知道,我们只关心HttpRequests类型的消息,httpContent类型就不进行处理ch.pipeline().addLast(new SimpleChannelInboundHandler<HttpRequest>() {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, HttpRequest msg) throws Exception {// 获取请求log.debug(msg.uri());// 返回响应DefaultFullHttpResponse response =new DefaultFullHttpResponse(msg.protocolVersion(), HttpResponseStatus.OK);byte[] bytes = "<h1>Hello, world!</h1>".getBytes();//设置响应的内容长度,不然浏览器会不知道信息已经接收完整,而不断刷新请求response.headers().setInt(CONTENT_LENGTH, bytes.length);response.content().writeBytes(bytes);// 写回响应ctx.writeAndFlush(response);}});}});ChannelFuture channelFuture = serverBootstrap.bind(8080).sync();channelFuture.channel().closeFuture().sync();} catch (InterruptedException e) {log.error("server error", e);} finally {boss.shutdownGracefully();worker.shutdownGracefully();}}
}


可以看到,使用netty可以非常简单快速的编写出一个http服务器,这就是netty的魅力啊!

Netty内置处理器以及编解码器相关推荐

  1. Netty内置处理器整理

    Netty提供了很多内置的处理器,高效地利用这些处理器,可以经过简单的配置就可以实现部分复杂功能,而不是自己花时间和精力去重复造"轮子". 要使用,得先知道,本文主要依据<n ...

  2. Netty框架进阶篇 - 分析和实战内置的编解码器及ChannelHandler

    文章目录 前言 基于Netty构建HTTP/HTTPS应用程序 HTTP协议相关编解码器 HTTP聚合消息 HTTP压缩 配置SSL,启用HTTPS 实战 空闲的连接和超时 序列化 基于Protoco ...

  3. 内置MCU H323协议的会议录播一体机集成中控音频处理器

    派尼珂Pnioke多功能媒体综合数字录播一体机,集成音视频综合处理器,软件可视化操作界面平台.硬件集成化设计,旨在为用户提供行业一体的解决方案. 应用场景:主要用于多媒体高清会议系统.科技法庭.车载指 ...

  4. 第一台64位RISC-V便携式计算机上市 内置平头哥玄铁C906处理器

    素材来源:CSDN,RISC-V International Twitter等,OCC经整理发布 RISC-V作为免费且灵活的开放指令集架构,虽然在PC.服务器和手机领域尚不能与X86和Arm相比,但 ...

  5. 迅为iTOP-RK3568开发板瑞芯微内置NPU处理器

    迅为iTOP-RK3568开发板 瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,集成4核arm架构A55处理器和Mali G52 2EE图形处理器,支持4K解码和1080 ...

  6. i58250u是低端处理器吗_入门级游戏主机怎么装?内置显示核心的CPU还是低端独显?...

    对于学生以及刚刚走进社会,没有多少收入的年轻人来说,游戏显然是一种高性价比的娱乐方式.不过要想获得极致的游戏体验,其实也要花不少钱,毕竟一块Radeon RX 5700中端显卡的售价就要2000元以上 ...

  7. [转载] JAVA从菜鸟【入门】到新手【实习】一一一一Python 内置函数,标准库与第三方库(拓展库),常用框架

    参考链接: copyreg -注册pickle支持的函数 掌握了python的基本语法和面向对象的设计思想后是学习了程序设计的"使用"规则, 具体实现和调用要依赖"标准库 ...

  8. stylus使用文档总结:内置方法+参数+条件+迭代+导入+继承

    一.内置方法 返回各种颜色的比重(如red(color)等) 颜色函数是CSS预处里器中内置的颜色函数功能,这些功能可以对颜色值进行处理,例如颜色的变亮.变暗.渐变颜色等处理十分的方便. lighte ...

  9. 索尼发布全球首款内置AI传感器,1200万像素,660元起售

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 全球第一款内置AI的图像传感器问世. 这就是近日来自索尼的重磅消息: 宣布即将发布两款智能视觉传感器--IMX500和IMX501. 它们集 ...

最新文章

  1. 将表数据生成Insert脚本
  2. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第5章-基于骨干网络的多智能体系统群集运动与避障控制
  3. openfire java集群_优化openfire服务器,达到单机20万,集群50万
  4. 双屏全屏跳回到主屏_双屏笔记本了解下?剪视频不要太好使
  5. AOSP6.0.1 launcher3入门篇—解析launcher.java文件
  6. MySQL分组查询语句
  7. 子进程中获取父进程id_UNIX环境高级编程——进程控制
  8. ic读卡器设置工具_每日学习:数字IC设计EDA软件教程整理
  9. 听说Unscrambler HSI是个很牛的光谱分析软件?
  10. 图的遍历:深度优先遍历(DFS)
  11. veu项目中下载图片到本地
  12. 元宇宙011 | 元宇宙的沉浸式体验会成瘾吗?
  13. 面试公司Offer——我的Python求职之路
  14. Java内存回收程序可否在指定的时间释放内存对象
  15. MATLAB 与 音频处理 相关内容摘记
  16. CTSC2016时空旅行
  17. 7.微信小程序(布局适配与物理逻辑像素)
  18. Flex 布局在IE浏览器下的兼容问题
  19. 2的31次方与2的负31次方
  20. 判断是否为数组的函数: isArray()

热门文章

  1. Hadoop中Context类的作用
  2. 使用QT-QSerialport打不开串口的原因
  3. java概述、安装、配置环境、运行
  4. ThinkPHP5 相关知识重点笔记
  5. idea新建maven项目没有src目录
  6. Android开发 listitem中采用倒计时
  7. AFN post的数据编码格式问题
  8. iOS UIKit:UITableView
  9. 静态成员函数调用方式--收藏帖子
  10. torch.cat同时连接多个tensor