Netty基本使用流程代码
下面的代码是Netty基本的使用流程代码,几乎Netty的使用都是使用下面的流程,这是一个HttpServer的简单应用,它将返回"Hello world"给客户端,复制修改以快速构建Netty应用(Netty版本4.1.10)。
TestServer.java
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;public class TestServer {public static void main(String[] args) {//两个事件循环组,都是死循环,bossGroup接收客户端EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try{ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new TestServerInitializer());ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();channelFuture.channel().closeFuture().sync();}catch (Exception e){System.out.println(e.fillInStackTrace());}finally {bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}
}
TestServerInitializer.java
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpServerCodec;public class TestServerInitializer extends ChannelInitializer<SocketChannel> {@Overrideprotected void initChannel(SocketChannel socketChannel) throws Exception {ChannelPipeline pipeline = socketChannel.pipeline();pipeline.addLast("httpServerCodec", new HttpServerCodec());pipeline.addLast("testHttpServerHandler", new TestHttpServerHandler());}
}
TestHttpServerHandler.java
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.*;
import io.netty.util.CharsetUtil;public class TestHttpServerHandler extends SimpleChannelInboundHandler<HttpObject> {//读取客户端请求,并返回响应给客户端@Overrideprotected void channelRead0(ChannelHandlerContext channelHandlerContext, HttpObject httpObject) throws Exception {if(httpObject instanceof HttpRequest){ByteBuf content = Unpooled.copiedBuffer("Hello world", CharsetUtil.UTF_8);FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,HttpResponseStatus.OK, content);response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain");response.headers().set(HttpHeaderNames.CONTENT_LENGTH, content.readableBytes());channelHandlerContext.writeAndFlush(response);}}
}
验证:
$ curl 'http://localhost:8899'
Hello world
Netty基本使用流程代码相关推荐
- Netty框架Bind流程浅析
Netty简介: Netty是JBOSS 基于Java NIO开源的提供异步.事件驱动的网络通信框架,用于开发高性能网络服务器 Zookeeper RocketMq Dubbo ShardingSph ...
- DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现) @author:wepon @blog:http://blog.csdn.net/u012162 ...
- MSM USB插入流程代码分析
点击打开链接 代码路径:kernel\msm-3.18\drivers\power\qpnp-smbcharger.c src_detect_handler -->update_usb_stat ...
- android+mms发送流程,mms发送流程代码版droid.docx
Lele was written in 2021 Lele was written in 2021 MMS发送流程代码版droid MMS发送流程(代码版) apps/Mms 1. 点击发送按钮Src ...
- iPhone应用中APNS推送通知流程代码实现案例
2019独角兽企业重金招聘Python工程师标准>>> iPhone应用中APNS推送通知流程代码实现案例是本文要介绍的内容,主要是如何来实现APNS的推送通知,具体内容来看本文详细 ...
- Halcon 摄像机标定流程-代码实现
1. 标定参数的构成 • 标定参数分为相机的内参和外参: • 内参:内参标定的是摄像系统的内部结构和关系,镜头的畸变在出厂的时候就已经固定下来的,唯一可能改变的是镜头和相机之间的组装关系.所以如果相机 ...
- 【鸿蒙OS开发入门】13 - 启动流程代码分析之第一个用户态进程:init 进程 之 init 任务详解
[鸿蒙OS开发入门]13 - 启动流程代码分析之第一个用户态进程:init 进程 之 init 任务详解 一. /etc/init.cfg 系统默认cfg:启动lo回环网卡 1.1 init.Hi35 ...
- 【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析
[Android SDM660源码分析]- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一.加载 UEFI 默认应用程序 1.1 LaunchDefaultBDSApps ...
- EOS测试链加入流程(代码版本与主网同步)
测试网络 EOS 测试链加入流程 (代码版本与主网同步) caokun_8341 · 4 分钟前 · 5 次阅读 准备:测试链目前的版本是v1.7.3 一.生成一个密钥对,私钥一定保存好,不要泄露,公 ...
最新文章
- javap 查看class文件的字节码命令用法
- 集合框架知识系列05 HashMap的源码分析和使用示例
- android到顶部,Android recyclerview滚动到顶部
- MySQL ADDTIME(t,n)	时间 t 加上 n 秒的时间
- string.h包含哪些函数_Excel进行数据分析常用方法及函数汇总—【杏花开生物医药统计】...
- 硬盘安装 solaris
- 【数据结构基础应用】【查找和排序算法】
- 算法--Hash算法及其应用场所
- IBM宣布:成功研制出了量子计算机原型机,量子计算机商业化正在加速!
- iOS开发之 Autolayout 详解
- 最全的Windows10强制永久关闭自动更新方法!
- RHCE——控制服务和守护进程
- mysql之从入门到删库跑路
- 【Cloudaily】3.15五招教你辨别真假云计算,2017 Gartner数据科学魔力象限出炉
- python双色球数据抓取及模拟生成高概率的号码
- 2019 中兴秋招笔试题1
- 腾讯测试岗位的面试经历
- opencv 图像拼接和图像融合技术
- 微信公众号开发整理(五)--自定义菜单
- 【Azure Data Platform】ETL工具(21)——Azure Databricks使用(1)——访问Azure Blob