°Fuhb
要比别人得到更多,就要付出比别人更多的努力
展开
-
Netty原理五:ChannelFuture、DefaultChannelPromise对象解析
文章目录1. 前言2. 原理解析2.1 ChannelFuture 调用 sync() 的作用2.2 Channel 调用的 closeFuture() 是什么 1. 前言 学习Netty的时候,大家肯定都会看到这么几句代码: //启动服务端监听 ChannelFuture future = serverBootstrap.bind(7000).sync(); //关闭? future.channel().closeFuture().sync(); 问原创 2021-10-07 17:08:39 · 417 阅读 · 0 评论 -
Netty原理四:客户端Bootstrap启动连接时做了些什么?
文章目录前言原理解析 前言 先来看一段很普通的客户端程序,定义 NioEventLoopGroup,然后通过 Bootstrap 去连接Server。 public static void main(String[] args) throws Exception { //线程组 NioEventLoopGroup group = new NioEventLoopGroup(); //启动配置 Bootstrap bootstrap =原创 2021-10-06 17:14:04 · 195 阅读 · 1 评论 -
Netty原理三:NioEventLoop如何处理客户端连接
文章目录前言原理解析总结 前言 Netty服务端存在类型为 NioEventLoopGroup 的 Boss 和 Worker,Boss 接收到客户端连接后,将客户端 Channel 注册到 Worker,如下图所示: 原理解析 在 NioEventLoop.java 找到 processSelectedKey 方法,每次有客户端连接时,都会触发该方法 private void processSelectedKey(SelectionKey k, AbstractNioChannel ch) {原创 2021-10-02 19:22:59 · 227 阅读 · 0 评论 -
Netty原理二:NioEventLoop 如何启动监听事件
前言 在NIO编程中,Server 通常会写一个无限循环的代码,Selector 持续监听新的事件: //NIO System.out.println("等待连接...."); while (true){ selector.select(); //处理 selector.selectedKeys 事件 } 但是Netty程序只需要启动 ServerBootstrap,然后就开启监听事件了,那它是如何处理的?原创 2021-10-02 17:03:24 · 286 阅读 · 0 评论 -
Netty原理一:ServerBootstrap启动过程全解析
所有的Netty服务端程序,我们都会执行 ServerBootstrap.bind(),它的内部会调用 initAndRegister() 方法,在 AbstractBootstrap.java 找到这段代码: 注意:为了方便阅读,本篇的源码部分只保留核心部分,比较方便阅读,无关紧要的会删掉,看完整源码需要自己打开IDEA哈 final ChannelFuture initAndRegister() { //1.创建 NioServerSocketChannel Chann原创 2021-10-01 21:59:42 · 514 阅读 · 0 评论 -
Netty实例:实现简单的通讯功能
Netty工作模型 通讯实例 引入依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.58.Final</version> </dependency>原创 2021-02-10 10:50:22 · 259 阅读 · 0 评论 -
NIO实例:Selector+SocketChannel实现多人聊天
文章目录1. 简介1.1 Channel1.1 Selector2. 群聊通讯2.1 实现目标2.2 服务端Server2.2.1 流程图2.2.2 服务端源码2.3 客户端Client2.3.1 客户端源码 1. 简介 1.1 Channel Channel 称为通道,可以异步读写数据,可以从 Buffer(缓冲区)读写数据 1.1 Selector Selector 能够检测多个 Channel(通道)是否有事件发生。如果有事件发生,可以取到事件的Channel进行处理。如果没有事件,就持续阻塞等待。原创 2021-02-03 17:59:56 · 230 阅读 · 0 评论 -
NIO源码解析:FileChannel基本使用
文章目录1. 简介2. 写入文件2.1 写入流程2.2. 写入Demo3. 读取文件3.1 读取流程3.2 读取Demo 1. 简介 FileChannel主要用来对本地文件进行 IO 操作,常见的方法有 public int read(ByteBuffer dst) ,从通道读取数据并放到缓冲区中 public int write(ByteBuffer src) ,把缓冲区的数据写到通道中 public long transferFrom(ReadableByteChannel src, long po原创 2021-02-02 11:12:18 · 155 阅读 · 1 评论 -
NIO源码解析:IntBuffer基本使用
文章目录简介公共属性初始化添加数据读取数据 简介 IntBuffer 是 Int 的缓冲区类型 类的关系图如下: Buffer:抽象类,一切Buffer相关的基类 IntBuffer:抽象类,内部维护一个 int[ ] 的数组对象 HeapIntBufferr:IntBuffer 的实现类,封装了对上一步 int[ ] 的操作方法 公共属性 // Invariants: mark <= position <= limit <= capacity private int原创 2021-02-01 20:41:25 · 509 阅读 · 0 评论