
NIO & Netty
文章平均质量分 88
Nice2cu_Code
立志成为一个前端、后端、测试全方位发展的程序员
展开
-
基于Netty实现简单的RPC框架
Netty实现RPC框架关于 Netty 的线程模型,详见博客,传送地址:详解Netty线程模型对应代码已上传到GitHub,传送地址:文章目录Netty实现RPC框架一、RPC简介二、代码实现1. 需求介绍2. 实现步骤3. 公共代码4. 服务端代码5. 客户端代码一、RPC简介RPC全称为remote procedure call,即远程过程调用。借助RPC可以做到像本地调用一样调用远程服务,是一种进程间的通信方式。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务原创 2021-08-02 10:42:38 · 448 阅读 · 0 评论 -
Netty线程模型
Netty线程模型文章目录Netty线程模型一、Reactor模型1. 单Reactor单线程2. 单Reactor多线程3. 主从Reactor多线程二、Netty线程模型一、Reactor模型Reactor模式,通过一个或多个输入同时传递给服务处理器的模式,服务器端程序处理传入的多个请求,并将它们同步分派到相应的处理线程, 因此Reactor模式也叫Dispatcher模式 。Reactor模式使用IO复用监听事件,收到事件后,分发给某个线程(进程),这点就是网络服务器高并发处理的关键。1. 单原创 2021-07-13 17:48:31 · 305 阅读 · 0 评论 -
Netty核心组件 + 消息边界问题的解决
推荐先阅读关于NIO的文章作为预备知识,传送地址:NIO三大组件介绍及ByteBuffer的使用NIO多路复用之Selector的使用Netty核心组件文章目录Netty核心组件一、入门案例1. 概述2. 入门案例3. 流程梳理二、组件1. EventLoop2. Channel2.1 ChannelFuture2.2 CloseFuture2.3 Netty为什么使用异步3. Future & Promise3.1 JDK-Future3.2 Netty-Future3.3 Netty-P原创 2021-07-01 10:24:23 · 308 阅读 · 0 评论 -
NIO 零拷贝
零拷贝文章目录零拷贝一、传统IO的问题二、NIO优化1. Linux 2.1 优化(零拷贝)2. Linux 2.4 优化(零拷贝)三、零拷贝四、Netty零拷贝一、传统IO的问题将服务器中的文件内容,通过 socket 的 API,发送到客户端:File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile(file, "r");//将数据从文件读取到byte数组中byte[] buf原创 2021-06-30 11:10:40 · 201 阅读 · 0 评论 -
NIO、BIO、AIO
IO模型文章目录IO模型一、stream 对比 channel二、同步、异步三、数据读取的过程四、同步阻塞、同步非阻塞、同步多路复用、异步非阻塞一、stream 对比 channelstream 指的是文件或 socket 的输入输出流stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区缓冲数据stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞 API,网络编程中 channel 可配合 selector 实现多路复用二者均为全双工,即原创 2021-06-29 08:40:13 · 179 阅读 · 0 评论 -
NIO多路复用之Selector的使用
Selector的使用文章目录Selector的使用一、阻塞 & 非阻塞1. 阻塞2. 非阻塞二、selector 介绍及常用API1. 多路复用2. 常用API三、处理 accept 事件四、处理 read 事件1. 为什么事件必须删除2. 处理客户端断开问题2.1 客户端强制断开2.2 客户端正常断开3. 处理消息边界问题4. ByteBuffer大小分配思路五、处理 write 事件六、selector 何时不阻塞七、使用多线程优化一、阻塞 & 非阻塞通过多个客户端向服务器发送数原创 2021-06-28 09:52:17 · 228 阅读 · 2 评论 -
NIO文件编程之FileChannel的使用
文件编程文章目录文件编程一、FileChannel工作模式获取读取写入关闭位置大小强制写入二、两个 Channel 传输数据三、Path四、Files删除很危险一、FileChannel工作模式FileChannel 只能工作在阻塞模式下获取不能直接打开 FileChannel,必须通过 FileInputStream、FileOutputStream 或者 RandomAccessFile 来获取 FileChannel,它们都有 getChannel 方法通过 FileInputSt原创 2021-06-23 10:30:07 · 450 阅读 · 0 评论 -
NIO三大组件介绍及ByteBuffer的使用
NIO三大组件文章目录NIO三大组件一、Channel & Buffer二、Selector1. 多线程版设计2. 线程池版设计3. selector版设计三、ByteBuffer1. 基本使用2. 结构组成3. 常见方法3.1 分配空间3.2 写入数据3.3 读取数据3.4 标记和重置3.5 与字符串的转换4. 两个理念4.1 分散读取4.2 集中写入5. 黏包、半包问题练习一、Channel & Bufferchannel 是读写数据的双向通道,可以从 channel 将数据读入原创 2021-06-22 09:32:23 · 327 阅读 · 0 评论