下面的代码是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基本使用流程代码相关推荐

  1. Netty框架Bind流程浅析

    Netty简介: Netty是JBOSS 基于Java NIO开源的提供异步.事件驱动的网络通信框架,用于开发高性能网络服务器 Zookeeper RocketMq Dubbo ShardingSph ...

  2. DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)

    DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现) @author:wepon @blog:http://blog.csdn.net/u012162 ...

  3. MSM USB插入流程代码分析

    点击打开链接 代码路径:kernel\msm-3.18\drivers\power\qpnp-smbcharger.c src_detect_handler -->update_usb_stat ...

  4. android+mms发送流程,mms发送流程代码版droid.docx

    Lele was written in 2021 Lele was written in 2021 MMS发送流程代码版droid MMS发送流程(代码版) apps/Mms 1. 点击发送按钮Src ...

  5. iPhone应用中APNS推送通知流程代码实现案例

    2019独角兽企业重金招聘Python工程师标准>>> iPhone应用中APNS推送通知流程代码实现案例是本文要介绍的内容,主要是如何来实现APNS的推送通知,具体内容来看本文详细 ...

  6. Halcon 摄像机标定流程-代码实现

    1. 标定参数的构成 • 标定参数分为相机的内参和外参: • 内参:内参标定的是摄像系统的内部结构和关系,镜头的畸变在出厂的时候就已经固定下来的,唯一可能改变的是镜头和相机之间的组装关系.所以如果相机 ...

  7. 【鸿蒙OS开发入门】13 - 启动流程代码分析之第一个用户态进程:init 进程 之 init 任务详解

    [鸿蒙OS开发入门]13 - 启动流程代码分析之第一个用户态进程:init 进程 之 init 任务详解 一. /etc/init.cfg 系统默认cfg:启动lo回环网卡 1.1 init.Hi35 ...

  8. 【Android SDM660源码分析】- 02 - UEFI XBL QcomChargerApp充电流程代码分析

    [Android SDM660源码分析]- 02 - UEFI XBL QcomChargerApp充电流程代码分析 一.加载 UEFI 默认应用程序 1.1 LaunchDefaultBDSApps ...

  9. EOS测试链加入流程(代码版本与主网同步)

    测试网络 EOS 测试链加入流程 (代码版本与主网同步) caokun_8341 · 4 分钟前 · 5 次阅读 准备:测试链目前的版本是v1.7.3 一.生成一个密钥对,私钥一定保存好,不要泄露,公 ...

最新文章

  1. javap 查看class文件的字节码命令用法
  2. 集合框架知识系列05 HashMap的源码分析和使用示例
  3. android到顶部,Android recyclerview滚动到顶部
  4. MySQL ADDTIME(t,n) 时间 t 加上 n 秒的时间
  5. string.h包含哪些函数_Excel进行数据分析常用方法及函数汇总—【杏花开生物医药统计】...
  6. 硬盘安装 solaris
  7. 【数据结构基础应用】【查找和排序算法】
  8. 算法--Hash算法及其应用场所
  9. IBM宣布:成功研制出了量子计算机原型机,量子计算机商业化正在加速!
  10. iOS开发之 Autolayout 详解
  11. 最全的Windows10强制永久关闭自动更新方法!
  12. RHCE——控制服务和守护进程
  13. mysql之从入门到删库跑路
  14. 【Cloudaily】3.15五招教你辨别真假云计算,2017 Gartner数据科学魔力象限出炉
  15. python双色球数据抓取及模拟生成高概率的号码
  16. 2019 中兴秋招笔试题1
  17. 腾讯测试岗位的面试经历
  18. opencv 图像拼接和图像融合技术
  19. 微信公众号开发整理(五)--自定义菜单
  20. 【Azure Data Platform】ETL工具(21)——Azure Databricks使用(1)——访问Azure Blob

热门文章

  1. (重点章节复习以及代码调整笔记)选择器:伪类和伪元素选择器(部分)
  2. 华表 单元格公式设定与计算
  3. Eclipse新建工程编译R cannot be resolved to a variable问题
  4. Linux高效数据统计命令wc
  5. 一地鸡毛 OR 绝地反击,2019年区块链发展指南
  6. windows 如何创建硬链接
  7. 前端将数据转化为弹幕效果的实现方式
  8. RecyclerView悬浮标题
  9. 转:.Net 中的反射(反射特性) - Part.3
  10. 页面事件(Init,Load,PreRender)执行顺序