netty编程一:快速入门
服务器端编程
第一步:maven 依赖 netty-all.jar,详情参考文章最后的maven依赖
第二步:创建服务端的NIO线程组EventLoopGroup;
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
第三步:创建并配置服务端启动辅助类ServerBootstrap;
1、创建ServerBootstrap
ServerBootstrap b = new ServerBootstrap();
2、配置ServerBootstrap实例的线程组(group):绑定线程组
b.group(bossGroup, WorkerGroup);
3、配置ServerBootstrap实例的channel:将创建的channel为NioServerSocketChannel
b.channel(NioServerSocketChannel.class);
4、配置ServerBootstrap实例的option:配置NioServerSocketChannel的tcp参数,eg:将他的backlog设置为1024;
b.option(ChannelOption.SO_BACKLOG, 1024);
5、配置ServerBootstrap实例的childHandler:绑定I/O事件的处理类;eg 半包问题处理,记录日志,数据编码解码,用户自定义的处理等等
// 此处注意:ChildChannelHandler是自定义的,继承了ChannelHandlerAdapter类,netty框架让我们可以集中精力用于实际业务上的数据处理,此处的内容后续文章在做重点分析
b.childHandler(new ChildChannelHandler());
6、配置ServerBootstrap实例的绑定并监听port与等待链路的关闭:绑定port,并调用同步阻塞方法sync来等待绑定操作完成,完成后会返回channelFuture实例(异步操作的通知回调)
// 绑定端口,同步等待绑定成功
ChannelFuture f = b.bind(8888).sync();
// 阻塞等待服务端监听端口关闭,目的:等待服务端链路关闭后main函数才退出
f.channel().closeFuture().sync();
7、注意:退出时,记得释放线程池资源
try{
// 服务器启动辅助类的创建与配置内容
// ...
}finally{
// 优雅退出,通过调用线程组的shutdownGracefully方法释放相关资源
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
客户端编程
第一步:maven 依赖 netty-all.jar
第二步:创建客户端的NIO线程组EventLoopGroup;
EventLoopGroup group = new NioEventLoopGroup();
第三步:创建并配置客户端启动辅助类Bootstrap;
1、创建Bootstrap
Bootstrap b = new Bootstrap();
2、配置Bootstrap实例的线程组(group):绑定线程组
b.group(group);
3、配置Bootstrap实例的channel:将创建的channel为NioSocketChannel
b.channel(NioSocketChannel.class);
4、配置Bootstrap实例的option:配置NioSocketChannel的tcp参数,eg:将他的nodelay设置为true;
b.option(ChannelOption.TCP_NODELAY, true);
5、配置Bootstrap实例的handler:绑定I/O事件的处理类;eg 半包问题处理,记录日志,数据编码解码,用户自定义的处理等等
// 此处注意:TimeClientHandler是自定义的,继承了ChannelHandlerAdapter类,netty框架让我们可以集中精力用于实际业务上的数据处理,此处的内容后续文章在做重点分析
b.handler(new ChannelInitializer<SocketChannel>(){
@Override
public void initChannel(SocketChannel ch) throws Exception{
ch.pipeline().addLast(new TimeClientHandler())
}
});
6、配置Bootstrap实例的绑定并监听port与等待链路的关闭:绑定port,并调用同步阻塞方法sync来等待绑定操作完成,完成后会返回channelFuture实例(异步操作的通知回调)
// 绑定服务器的IP和端口,同步等待连接指定服务器成功
ChannelFuture f = b.connect(127.0.0.1,8888).sync();
// 阻塞等待服务端监听端口关闭,目的:等待服务端链路关闭后main函数才退出
f.channel().closeFuture().sync();
7、注意:退出时,记得释放线程池资源
try{
// 服务器启动辅助类的创建与配置内容
// ...
}finally{
// 优雅退出,通过调用线程组的shutdownGracefully方法释放相关资源
group.shutdownGracefully();
}
关于netty的maven依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.33.Final</version>
</dependency>
netty编程一:快速入门的更多相关文章
- Swift语言快速入门
Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- Yacc 与 Lex 快速入门
Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...
- Windows下FFmpeg快速入门
本系列文章导航 Windows下FFmpeg快速入门 ffmpeg参数解释 mencoder和ffmpeg参数详解(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视 ...
- netty深入学习之一: 入门篇
netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...
- Spring Boot 2.0 的快速入门(图文教程)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...
- SpringBoot系列: RestTemplate 快速入门
====================================相关的文章====================================SpringBoot系列: 与Spring R ...
- logstash快速入门实战指南-Logstash简介
作者其他ELK快速入门系列文章 Elasticsearch从入门到精通 Kibana从入门到精通 Logstash是一个具有实时流水线功能的开源数据收集引擎.Logstash可以动态统一来自不同来源的 ...
- 零基础快速入门web学习路线(含视频教程)
下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件
前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. im ...
随机推荐
- Linux,Ubuntu,Mint 环境下 navicat 乱码问题
1. 官方下载好以后,进入目录 执行 ./start_navicat 可以启动软件. 2. 如果有乱码,首先,使用编辑器打开 start_navicat ,比如 vim start_navicat ...
- Transformer【Attention is all you need】
前言 Transfomer是一种encoder-decoder模型,在机器翻译领域主要就是通过encoder-decoder即seq2seq,将源语言(x1, x2 ... xn) 通过编码,再解码的 ...
- 装饰器模式-Decorator(Java实现)
装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...
- 理解Java的NIO
同步与阻塞 同步和异步是针对应用程序和内核的交互而言的. 同步:执行一个操作之后,进程触发IO操作并等待(阻塞)或者轮询的去查看IO的操作(非阻塞)是否完成,等待结果,然后才继续执行后续的操作. 异步 ...
- 模块--random
random模块 1 random.random() print(random.random()) 0-1 之间随机小数 不包含1 2 random.uniform(a,b) ...
- java控制多线程同时写一个文件
最近出现一个需求,大体要做的就是控制多线程同时操作一个文件.当时第一个反应是不要用synchronized,太low了,然后我就使用了读写锁ReentrantReadWriteLock,然后写完静下来 ...
- 干掉windows无脑设定:“始终使用选择的程序打开这种文件”、“使用Web服务查找正确的程序”
先看几张图体会一下: 实在很佩服自己就那样默默忍受了很多很多年.其实这些东西在网上小小的一搜,5分钟就能搞定. 然而我们大家都在想,现在没时间,我还要做xxxx事呢,反正多点两下鼠标而已. 是啊,点两 ...
- Spring Cloud 2-Config 分布式配置中心(七)
Spring Cloud Config 1.github配置 2.服务端配置 pom.xml application.xml Application.java 3.配置和命名 1. 配置加载顺序 ...
- Django_路由详
动态路由和动态参数捕获 动态路由:url支持正则表达式, 访问的url能够匹配成功就去执行对应的视图函数 捕获参数: # 捕获参数,位置传参 url(r'^data/([0-9]{4})/([0-2] ...
- ABP core学习之一 使用Mysql数据库
修改项目EntityFrameworkCore的相关内容 1.添加类库 使用nuget包管理器,添加Pomelo.EntityFrameworkCore.MySql 2.TradeErpDbConte ...