栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Netty读书笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Netty读书笔记

朝闻道,夕死可矣


Netty是一款创建 高性能 网络程序的框架

文章目录
  • 一Netty程序
  • 二异步和事件驱动
    • 1.1编写Echo服务器
    • 1.1.1ChannelHandler和业务逻辑
    • 2.1Java网络编程
    • 2.2NIO
    • 2.2异步和事件驱动
    • 2.3Netty的特点与核心组件

一Netty程序 二异步和事件驱动

编写的Echo客户端和服务器应用程序.

图为:Echo客户端和服务器
Echo客户端和服务器之间的交互是:
客户端建立连后,想服务器发送一个或多个消息,
服务器将每个消息回送给客户端
这是客户端/服务器系统中典型的 请求-响应交互模式

1.1编写Echo服务器

所有的Netty服务器都需要有以下两个部分

  1. 至少一个ChannelHandler,该组件实现了服务器对从客户端接收的数据的处理,即它的业务逻辑
  2. 引导 是配置服务器的启动代码.至少将服务器绑定到它要监听连接请求的端口上
1.1.1ChannelHandler和业务逻辑 2.1Java网络编程

传统的javaIO流只能同时处理一个连接,
如果需要管理多个客户端,则需要为每个客户端Socket创建一个新的Thread

  • 大量线程处于休眠状态,只是等待输入或者输出数据,这是资源的浪费
  • 需要为每个线程分配内存,默认大小为 64KB–1MB
  • 线程间上下文切换开销问题
2.2NIO

JDK1.4引入了NIO

2.2异步和事件驱动

一个 即 异步 又 事件驱动 的系统的特点是:
可以任意顺序响应在任意时间点产生的事件

异步和可伸缩性的关联:

  • 异步方法会立即返回,并且在它完成时,会直接或者稍后某个时间点通知用户
  • 选择器的出现可以让较少的线程可监视许多连接上的事件

所以非阻塞I/O比阻塞I/O处理的更快.

2.3Netty的特点与核心组件


核心组件有:

  • Channel
  • 回调
  • Future
  • 事件 和 ChannelHandler

Channel
Channel是Java NIO的基本构造
Channel是传入(入站) 传出(出站)数据的载体,因此,它可以被打开或者关闭,连接或者断开连接

回调
一个回调就是一个方法
一个指向已经被提供给另一个方法的方法的引用
( 我现在还是不懂这句话的意思)

《Netty实战》的33页关于 回调 所举的例子如下:

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

public class 回调 extends ChannelInboundHandlerAdapter {
   @Override
   public void channelActive(ChannelHandlerContext ctx) throws Exception {
       System.out.println("Client " + ctx.channel().remoteAddress() + " connected");
       //当一个新的连接已经被建立时,channelActive(ChannelHandlerContext)将会被调用
   }
}

我是看不懂,一起来看看它的源码

这是ChannelInboundHandlerAdapter 类的介绍:

这里面提到了继承结构

Future
Future在操作完成时通知应用程序的一种方式
即 在未来某个时刻完成,提供对结果的访问
所以该对象 可以看做异步操作结果的占位符

JDK中 interface java.util.concurrent.Future只允许手动检查对应的操作是否完成.

一种阻塞直到完成
这样并不好,所以
Netty提供了另一种实现 ChannelFuture,
用于执行异步操作时来使用

ChannelFuture提供了额外的方法,使完美可以注册一个或者多个ChannelFutureListener实例.
监听器的回调方法operationComplete()和jdk中的Future一样用于对应的操作完成时被调用.
这样,我们通过ChannelFuture注册的ChannelFutureListener就可以判断该操作是成功完成了还是出错了.
如果出错了我们可以检索产生Throwable,

综上所述:通过ChannelFuture注册的ChannelFutureListener的通知机制消除了原本jdk的手动检查是否完成的操作

每个Netty的出站I/O操作都返回一个ChannelFuture,也就是说他们不会阻塞
正如前面提到的Netty完全是异步和事件驱动

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号