1、首先学习Netty中几个重要的组建:

EventLoops: EventLoops 的目的是为Channel处理IO操作,一个EventLoop可以为多个Channel服务。
Bootstrap:Bootstrap是一个用于启动NIO(客户端)的辅助启动类。ServerBootstrap这是针对于服务端的,一个Netty应用通常由一个Bootstrap开始,负责配置整个Netty程序,串联起各个组件。
Handler:Handler组件是用来支持各种协议和处理数据的方式,比如连接、数据接收、异常、数据转换等。
Channel:Channel代表了一个Socket链路,或者其他和IO操作相关的组件,他和EventLoop一起用来IO处理。
Future:在Netty中所有的IO操作都是异步的,所以消息不能立刻被正确处理,可以等待这个执行完或者直接注册一个监听,具体通过Future和ChannelFutures注册监听,不管结果怎么样都会返回一个ChannelFuture。
ChannelPipeline:一个Netty应用基于ChannelPipeline机制,这种机制需要依赖于EventLoop和EventLoopGroup,因为他们三个都是和事件处理相关。
2、Netty处理连接请求和业务逻辑
a)、Netty是一个非阻塞的、事件驱动的、网络编程框架,很容易理解Netty会用线程来处理IO事件。
b)、一个Channl会对应一个EventLoop,而一个EventLoop会对应一个线程,就是说一个线程在负责一个Channel的IO操作。

3、如何配置一个Netty应用。

服务端:
// 配置服务端的NIO线程组 
EventLoopGroup bossGroup = new NioEventLoopGroup(); // 用于与客户端进行连接 
EventLoopGroup workerGroup = new NioEventLoopGroup(); // 用于对IO的读写操作 
try { 
 ServerBootstrap b = new ServerBootstrap(); 
 b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
 .option(ChannelOption.SO_BACKLOG, 1024).childHandler(new ChildChannelHandler()); 
// 绑定端口,同步等待客户端的连接 
ChannelFuture f = b.bind(8080).sync();
 // 等待服务端监听端口关闭 
 f.channel().closeFuture().sync(); 
} finally { 
// 优雅退出,释放线程池资源 
bossGroup.shutdownGracefully(); 
workerGroup.shutdownGracefully(); 
}
/*
ChannelInitializer,当一个链接建立时,我们需要知道怎么来接收或者发送数据,当然,我们有各种各样的Handler实现来处理它,那么ChannelInitializer便是用来配置这些Handler,它会提供一个ChannelPipeline,并把Handler加入到ChannelPipeline
*/
private class ChildChannelHandler extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel sc) throws Exception {
// TimeServerHandler类继承ChannelHandlerAdapter类,用来对数据接收和发送。
sc.pipeline().addLast(new TimeServerHandler()); 
}
}
客户端:
// 配置客户端NIO线程组
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group).channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch)
throws Exception {
ch.pipeline().addLast(new TimeClientHandler());
// TimeClientHandler类继承ChannelHandlerAdapter类,用来对数据接收和发送。
}
});
// 发起异步连接操作
ChannelFuture f = b.connect(127.0.0.1, 8080).sync();
// 当代客户端链路关闭
f.channel().closeFuture().sync();
} finally {
// 优雅退出,释放NIO线程组
group.shutdownGracefully();
}

这是一个简单的实例,希望对你有帮助。

2015年06月09日相关推荐

  1. 开源社区Github在2022年06月09日公测了三个新的成就徽章

    开源社区Github在2022年06月09日公测了三个新的成就Achievements 徽章 今天登录GitHub突然惊喜的发现多了一个可爱的小鲨鱼徽章. 加上之前的三个徽章,现在一共有六个啦- 有两 ...

  2. IntelliJ IDEA 14.0.2破解注册码文件(2015年06月08日)

    Java文件代码: import java.math.BigInteger;import java.util.Date;import java.util.Random;import java.util ...

  3. mysql 新建师徒_[深圳|内门弟子]JAVA-谢霆锋|2020年06月09日的日报-技能树.IT修真院...

    今天完成的事情 1.mybatis的增删改查 下面是实现步骤和测试结果 项目目录 1.在pom.xml导入mybatis依赖和log4j 2.配置mybatis-config.xml<?xml ...

  4. 始于2015年11月23日,终于2018年08月08日

    留念. 2015年11月23日:在一起 2016年01月17日-21日:北京机场,我们❤ 2016年04月16日:去他所在城市--成都 2016年06月04-06日:第一次小旅游--都江堰.青城山 2 ...

  5. 获香港证监会颁发牌照的弘量研究,正用智能投顾帮助金融机构降低成本,提升资产管理能力 By 藤子2017年10月09日 17:16 撰文 | 藤子 2015 年,雷春然和黄耀东都是在香港科技大学的

    获香港证监会颁发牌照的弘量研究,正用智能投顾帮助金融机构降低成本,提升资产管理能力 By 藤子2017年10月09日 17:16 撰文 | 藤子 2015 年,雷春然和黄耀东都是在香港科技大学的图书馆 ...

  6. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)

    时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...

  7. 空之轨迹手游服务器维护,《空之轨迹》手游06月15日更新公告

    亲爱的游击士们: 我们将于06月15日7:00-9:00进行停服维护(开服时间视实际情况可能提前或延后),维护期间将无法登陆游戏,请玩家注意调整自己的游戏时间,给各位带来的不便敬请谅解. 精彩活动 限 ...

  8. 【06月18日】A股滚动市净率PB历史新低排名

    2010年01月01日 到 2019年06月18日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年06月18日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...

  9. 【06月05日】A股滚动市净率PB历史新低排名

    2010年01月01日 到 2019年06月05日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年06月05日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...

最新文章

  1. 中国肠道大会 | 日程及嘉宾
  2. delphi中等待外部应用程序执行完成后,再继续执行自有代码段
  3. 设计模式(2): 观察者模式-1
  4. 训练生成对抗网络的过程中,训练gan的地方为什么这里没有detach,怎么保证训练生成器的时候不会改变判别器
  5. Oracle查询优化-07日期运算
  6. python开发环境比较好_python开发环境比较好,python 集成开发环境哪个好
  7. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
  8. java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询
  9. HDU1878 欧拉回路
  10. SpringMVC的数据响应-页面跳转-返回ModelAndView形式2(应用)
  11. (7)FPGA面试题Latch和Register区别
  12. 单体测试书的检查要点
  13. 【转】在birt中显示条形码
  14. Sage CRM升级注意事项三
  15. Oracle EBS使用adpatch工具打patch过程 hotpatch mode
  16. 《极限逃亡》12.3正式上线链游玩家|末日围城、文明重启
  17. 【以太网硬件一】802.3xx标准怎么这么多?它们有什么关系?
  18. 动画,在我眼中,详细
  19. XAMPP介绍、安装及使用
  20. 数据结构考研:电脑磁盘碎片的定义、产生原理和清理原因(文件碎片/机械硬盘/固态硬盘/硬盘清理/计算机/软件工程/王道论坛)

热门文章

  1. python正则化函数_正则化方法及Python实现
  2. 【iOS】动画之人脸识别 —— ARScanning
  3. 计算机网络基本概念,计算机网络基本概念【笔记】
  4. 梅科尔工作室-张敏-鸿蒙笔记3
  5. 三,容器类型及其函数(列表,元组,字典,集合)
  6. 甲子光年专访一览群智 增强智能是当前AI的最佳路径
  7. iOS APP缓存清理
  8. POJ 3668 Game of Lines
  9. CodeForces - 723D Lakes in Berland dfs
  10. 大专生拿到阿里offer,却担心背调不过,网友:985在你面前黯淡无光