°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 · 496 阅读 · 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 · 208 阅读 · 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 · 279 阅读 · 0 评论 -
Netty原理二:NioEventLoop 如何启动监听事件
前言在NIO编程中,Server 通常会写一个无限循环的代码,Selector 持续监听新的事件: //NIO System.out.println("等待连接...."); while (true){ selector.select(); //处理 selector.selectedKeys 事件 }但是Netty程序只需要启动 ServerBootstrap,然后就开启监听事件了,那它是如何处理的?原创 2021-10-02 17:03:24 · 362 阅读 · 0 评论 -
Netty原理一:ServerBootstrap启动过程全解析
所有的Netty服务端程序,我们都会执行 ServerBootstrap.bind(),它的内部会调用 initAndRegister() 方法,在 AbstractBootstrap.java 找到这段代码:注意:为了方便阅读,本篇的源码部分只保留核心部分,比较方便阅读,无关紧要的会删掉,看完整源码需要自己打开IDEA哈 final ChannelFuture initAndRegister() { //1.创建 NioServerSocketChannel Chann原创 2021-10-01 21:59:42 · 598 阅读 · 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 · 275 阅读 · 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 ChannelChannel 称为通道,可以异步读写数据,可以从 Buffer(缓冲区)读写数据1.1 SelectorSelector 能够检测多个 Channel(通道)是否有事件发生。如果有事件发生,可以取到事件的Channel进行处理。如果没有事件,就持续阻塞等待。原创 2021-02-03 17:59:56 · 409 阅读 · 0 评论 -
NIO源码解析:FileChannel基本使用
文章目录1. 简介2. 写入文件2.1 写入流程2.2. 写入Demo3. 读取文件3.1 读取流程3.2 读取Demo1. 简介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 · 343 阅读 · 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 · 609 阅读 · 0 评论