服务器端编程

第一步: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编程一:快速入门的更多相关文章

  1. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  2. Yacc 与 Lex 快速入门

    Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...

  3. Windows下FFmpeg快速入门

    本系列文章导航 Windows下FFmpeg快速入门 ffmpeg参数解释 mencoder和ffmpeg参数详解(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进行视 ...

  4. netty深入学习之一: 入门篇

    netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...

  5. Spring Boot 2.0 的快速入门(图文教程)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...

  6. SpringBoot系列: RestTemplate 快速入门

    ====================================相关的文章====================================SpringBoot系列: 与Spring R ...

  7. logstash快速入门实战指南-Logstash简介

    作者其他ELK快速入门系列文章 Elasticsearch从入门到精通 Kibana从入门到精通 Logstash是一个具有实时流水线功能的开源数据收集引擎.Logstash可以动态统一来自不同来源的 ...

  8. 零基础快速入门web学习路线(含视频教程)

    下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利 ...

  9. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件

    前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. im ...

随机推荐

  1. 分类器的评价指标-ROC&AUC

    ROC 曲线:接收者操作特征曲线(receiver operating characteristic curve),是反映敏感性和特异性连续变量的综合指标,roc 曲线上每个点反映着对同一信号刺激的感 ...

  2. window.location.href 传参中文乱码问题!!!

    不是所有地方都会用Ajax  当你使用window.location.href 来传中文参数的时候 如何避免乱码问题 js 是这样写的    下面代码中  方式 封装编码  参数 username  ...

  3. JavaWeb之DButils整理

    一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. 用前导包!!!DBUtils包!!! 二.DBUtils的三 ...

  4. URL存在跨站漏洞http host头攻击漏洞解决方案

    最近项目部署的时候客户使用的绿盟扫描出一些漏洞,老大让我处理,经过看大神的博客等方式,分享一些简单的解决方法. 一 跨网站脚本 跨网站脚本(Cross-site scripting,通常简称为XSS或 ...

  5. 论文翻译——Lattice indexing for spoken term detection

    第II节简要介绍与本文有关的先前工作第III节介绍文中使用的定义以及术语 第IV节介绍如何从原始ASR lattices中生成倒排索引结构 第V节详细介绍了ASR结构以及实验使用的数据 第VI节提供了 ...

  6. 通过命令修改mysql的提示符(转)

    本文转自冲出地球的博客原文链接:https://www.cnblogs.com/zhengchenhui/p/6649235.html 在cmd窗口操作mysql数据库的时候,前面的提示符永远都是my ...

  7. SVN clean失败解决方法

    一.问题描述 1.svn 更新或者提交时,报错:svn cleanup failed–previous operation has not finished; run cleanup if it wa ...

  8. css3混合模式

    https://juejin.im/entry/5b4802d15188251ac446d3a9

  9. 【模板】最长公共子序列(LCS)。

    看过好多人的博客,感觉要么是太复杂要么就是太不容易理解. 那就亲自动手写一个通俗易懂的. 先定义两个数组,第一个数组为主,用第二个数组来匹配第一个,看能有多少可以对应上的. 所以,其实第一个数组的内容 ...

  10. 软件测试为什么需要学习Linux的知识?Linux学到什么程度?-log5

    ​软件测试为什么需要学习Linux的知识?学到什么程度?-log5 Dotest软件测试学堂-董浩 公司目前90%的服务器操作系统不是Windows,而是Linux(RedHat.Debian.Cen ...