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 ...
随机推荐
- beego学习1
下载 go get -u -v github.com/astaxie/beego beego源码 go get -u -v github.com/beego/bee bee开发工具 bee ...
- GIL全局锁测试
基础知识:https://www.cnblogs.com/SuKiWX/p/8804974.html 测试环境 python3.7默认解释器(cpython) cpu为四核 测试代码 #! /usr/ ...
- Mysql 根据一个表数据更新另外一个表
方法一: update 更新表 set 字段 = (select 参考数据 from 参考表 where 参考表.id = 更新表.id); update table_2 m set m.colum ...
- 六十一、linux 编程—— 守护进程
61.1 介绍 守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,在系统关闭时终止 守护进程也称为后台进程 所有守护进程都以超级用户(用户 ID 为0)的优先权运行. 守护进 ...
- PHP代码审计之XSS操作
XSS XSS是Cross Site Scripting(跨站脚本攻击), 它与sql注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除的目的,而在XSS攻击中,通过插入 ...
- java接口多实现和多继承
package test; interface mouth { public abstract void speak(); } interface nose{ public abstract void ...
- String Byte 互转
string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: ...
- 第十三届东北师范大学程序设计竞赛热身赛 C(exgcd+欧拉函数)
题目链接 思路 对于答案,我们考虑对于每个可行的$c$会和多少$d$产生合法序偶.首先证明$c$和$b$必然互质. 假设$c$和$b$不互质,那么设$t_{1}=gcd(c, b),(t_{1} &g ...
- 通过命令修改mysql的提示符(转)
本文转自冲出地球的博客原文链接:https://www.cnblogs.com/zhengchenhui/p/6649235.html 在cmd窗口操作mysql数据库的时候,前面的提示符永远都是my ...
- java 中final关键字
1.final变量,一旦该变量被设定,就不可以再改变该变量的值. final关键字定义的变量必须声明时赋值.一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,一个既是static和fina ...