作为一个正在Java路上摸爬滚打的小菜鸡,之前在项目中也用过Netty,也因为Netty报名阿里的中间件大赛,但终究功力太浅,最终不了了之,最近工作中又遇到了Netty的小姐妹Mina。此时楼主觉得Netty还是需要潜心深入学习一下。就这样在成为大菜鸡的路上不消停的折腾……

NIO简介Netty是Java世界知名的基于NIO的网络框架,因此说到Netty,介绍一下NIO还是有必要的。

Java NIO又称Non-blocking IO,NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。

Java NIO 主要由Channels,Buffers,Selectors,虽然Java NIO 中除此之外还有很多类和组件,但总体来说,Channel,Buffer 和 Selector 构成了核心的API。其他组件和类主要是围绕这三者进行的。对NIO感兴趣的小伙伴请移步Java NIO 系列教程

Netty快速入门

一般在楼主学习一项新技术时,首先得来个"Hello,World"来暖暖场。当然Netty也不例外,这里楼主实现一个echo服务器,那么echo是什么呢?

就是先启动客户端,然后建立一个连接并发送一个或多个消息发送到服务器,其中每相呼应消息返回给客户端。当然,这个应用程序没多大意义。但也可以帮助我们理解Netty,以及学习Netty的模板代码。

添加maven依赖

一般开源软件在maven仓库里面都可以找到,请移步maven厂库1

2 io.netty

3 netty-all

4 4.1.12.Final

5

代码实现

Echo的服务端代码实现,下面代码实现的主要逻辑是绑定端口号,启动服务,是Netty中常见的模板代码。1public class EchoServer {

2 private final int port;

3

4 public EchoServer(int port) {

5 this.port = port;

6 }

7

8 public static void main(String[] args)

9 throws Exception {

10 // 服务器监听端口号

11 int port = 8080;

12 new EchoServer(port).start();

13 }

14

15 public void start() throws Exception {

16 // NioEventLoopGroup是处理I/O操作的多线程事件循环

17 EventLoopGroup group = new NioEventLoopGroup();

18 try {

19 // ServerBootstrap是一个用于设置服务器的引导类。

20 ServerBootstrap b = new ServerBootstrap();

21 b.group(group)

22 .channel(NioServerSocketChannel.class) // 使用NioServerSocketChannel类,用于实例化新的通道以接受传入连接

23 .localAddress(new InetSocketAddress(port)) // 设置服务器监听端口号

24 .childHandler(new ChannelInitializer() {

25 @Override

26 public void initChannel(SocketChannel ch) throws Exception {

27 ch.pipeline().addLast(new EchoServerHandler()); // 添加请求处理

28 }

29 });

30 // 绑定到端口和启动服务器

31 ChannelFuture f = b.bind().sync();

32 System.out.println(EchoServer.class.getName() +

33 " started and listening for connections on " + f.channel().localAddress());

34 f.channel().closeFuture().sync();

35 } finally {

36 group.shutdownGracefully().sync();

37 }

38 }

39}

EchoServerHandler实现代码,这里是使用Netty实现网络操作业务逻辑的主要阵地。在这里覆盖channelRead()事件处理程序方法。每当从客户端接收到新数据时,使用该方法来接收客户端的消息。1@Sharable

2public class EchoServerHandler extends ChannelInboundHandlerAdapter {

3 @Override

4 public void channelRead(ChannelHandlerContext ctx, Object msg) {

5 // 覆盖channelRead()事件处理程序方法

6 ByteBuf in = (ByteBuf) msg;

7 System.out.println(

8 "Server received: " + in.toString(CharsetUtil.UTF_8));

9 ctx.write(in);

10 }

11

12 @Override

13 public void channelReadComplete(ChannelHandlerContext ctx)

14 throws Exception {

15 // channelRead()执行完成后,关闭channel连接

16 ctx.writeAndFlush(Unpooled.EMPTY_BUFFER)

17 .addListener(ChannelFutureListener.CLOSE);

18 }

19

20 @Override

21 public void exceptionCaught(ChannelHandlerContext ctx,

22 Throwable cause) {

23 cause.printStackTrace();

24 ctx.close();

25 }

26}

客户端代码跟上面的代码大体类似,楼主就不在贴出来了,就当留个小作业吧,感兴趣的小伙伴请自行搞定。

明哥使用Netty的姿势

明哥基于Netty开发了应用配置管理平台服务,实现了“为业务提供统一的配置管理服务”,可以做到开箱即用,主要功能有:简单易用: 上手非常简单, 只需要引入maven依赖和一行配置即可;

在线管理: 提供配置管理中心, 支持在线管理配置信息;

实时推送: 配置信息更新后,实时推送配置信息, 项目中配置数据会实时更新并生效, 不需要重启线上机器;

配置备份: 配置数据会在MySQL中会对配置信息做备份, 保证配置数据的安全性;

小结

虽然明哥经常使用到 Netty,但是很多时候对 Netty 的一些概念还是处于知其然,不知其所以然的状态,因此就萌生了重新捋一遍 Netty 实战,在有余力的情况下撸一下Netty的源码,并坚持写博客记录一下这个过程。由于楼主能力有限,博客中难免有不少错误之处,期望大家的建议,斧正。

java netty教程_明哥教学 - Netty简单入门教程相关推荐

  1. Java绘制海螺_彩铅画海螺步骤入门教程

    漂亮的海螺怎么画?海螺是生活在海里的软体动物,海螺的种类很多,海螺壳可以做装饰品.相信很多小伙伴也和学画画网一样,曾经把海螺放在耳朵边上听大海的声音.那么今天跟着学画画网一起来学习用彩铅画一个漂亮的海 ...

  2. 电脑雕刻教程_湖南益阳3DMAX建模培训入门教程【仁厚教育】

    湖南益阳3DMAX建模培训入门教程[仁厚教育] 仁厚教育学校拥有雄厚的师资力量,中心现有现有专教师多名,均为本科以上,具为扎实的理论基础和丰富的教育经验.所有员工都必须经过仁厚教育总部的岗位培训和考核 ...

  3. python十分钟教程_简洁的十分钟Python入门教程

    [简介] Python是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. [特点] 1 Python使用C语 ...

  4. java swt 菜鸟教程_编程基础学习JS的入门教程

    将JavaScript 插入网页的方法 使用 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中插入JavaScript: ... 其中的...就是代码的内容.Jav ...

  5. python pyqt教程_『开发技巧』PyQt5入门教程

    PyQt5相关 PyQt5是一套来自Digia的Qt5应用框架和Python的粘合剂.支持Python2.x和Python3.x版本.本教程使用Pyhton 3.Qt库是最强大的GUI支持库的一种.P ...

  6. dbforge studio for mysql教程_【dbForge Studio for MySQL入门教程】如何创建和编辑查询

    要创建查询: 1. 创建服务器连接. 2. 在" Start " 页上单击" SQL Development" ,然后单击" SQL Editor&q ...

  7. python asyncio教程_一份详细的asyncio入门教程

    asyncio模块提供了使用协程构建并发应用的工具.它使用一种单线程单进程的的方式实现并发,应用的各个部分彼此合作, 可以显示的切换任务,一般会在程序阻塞I/O操作的时候发生上下文切换如等待读写文件, ...

  8. ZBrush教程_次时代作品“行尸矿工”制作教程

    ZBrush教程_次时代作品"行尸矿工"制作教程 链接:https://pan.baidu.com/s/12BcANjJC_Q8SLgqTf2dyjw 密码:hd0c 这是在我工作 ...

  9. Git快速入门篇—— Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程)

    Git快速入门篇-- Windows版本淘宝镜像快速下载安装详细步骤及简单入门教程(附带图文教程) 前言:我们平时在整理代码的时候,尤其是与别人一起开发项目的时候,常常涉及到代码的更新,因此代码版本问 ...

最新文章

  1. 用protoc-gen-lua生成PB的lua代码
  2. 关于java环境配置问题
  3. 添加水印(文字and图片)
  4. JavaScript splice, slice, split方法区分整理, replace方法对字符处理
  5. 作业帮电脑版在线使用_在线K12赛道六虎争霸:猿辅导、作业帮又宣布新一轮融资...
  6. VisualStudio运行C++项目检测include<stdio.h>报错解决方案
  7. Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
  8. defineProperty AND defineProperties
  9. js检测弹出窗口拦截程序
  10. 美国人教你这样用Google,你真的会变特工!
  11. html css图片展开动画,8个实用炫酷的HTML5图片动画应用
  12. 名副其实!华为天才少年身份曝光!
  13. 于谦一共收了几个徒弟,为什么?
  14. ext.net 开发学习之TabPanel (二)
  15. 软件集成策略故事连载----集成这破活儿
  16. POJ 2773 Happy 2006 【数论,容斥原理+二分】
  17. 小程序自定义tabbar占位问题
  18. HTML5前端教程:jQuery项目实战
  19. 下一代半导体表面清洁技术
  20. wps怎么恢复成单页_WPS怎么调回单页显示

热门文章

  1. δ星 丨 读书笔记 notes-《富甲美国》:顾客至上,极致性价比
  2. Android: AAPT: error: duplicate attribute.
  3. java getparameter赋值_java getparameter获取值的问题
  4. oracle四舍五入的函数,Oracle 数值四舍五入(组图)
  5. [js]网状粒子效果源代码
  6. Ubuntu1604桌面没有图标
  7. 一个关于借钱的经典问题:第一天借一块钱,第二天是前一天的2倍,依此类推30天。请问第30天要给多少钱?总共又要给多少钱?...
  8. T检验 卡方检验 检验的要求
  9. 计算机服务器一般折旧年限,服务器主机折旧年限
  10. 关于使用IE浏览特制网页时允许远程执行代码漏洞(MS10-018)的复现