0805【Netty】
主要包含书籍《优秀NIO 服务器》、《Netty进阶之路》、B站《韩老师jNettyj讲解》
努力的阳光蓝孩
学习一时爽,一直学习一直爽
展开
-
Netty学习笔记二十四、Netty ByteBuf 代码
package com.hao.netty.buf;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;/** * @author haoxiansheng * @date 2020-05-24 */public class NettyByteBuf01 { public static void main(String[] args) { /** * 创建一个ByteB.原创 2020-05-24 22:32:35 · 156 阅读 · 0 评论 -
Netty学习笔记二十三、Netty核心模块组件
一、Bootstrap、ServerBootstrap1、Bootstrap意思:引导。一个Netty应用通常由一个Bootstrap 开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类。ServerBootstrap是服务端启动引导类。2、常见的方法1)public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) // 该方法原创 2020-05-24 22:29:24 · 171 阅读 · 0 评论 -
Netty学习笔记二十二、Netty快速入门实例-Http服务
一、讲解1、Netty服务在6669端口监听,浏览器发出请求"http://localhost://6669"2、服务器可以回复消息,并对特定的资源进行过滤3、目的:Netty可以做http服务开发,并且理解Handler实例和客户端及其请求的关系。二、代码package com.hao.netty.http;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;impor原创 2020-05-24 17:02:18 · 186 阅读 · 0 评论 -
Netty学习笔记二十一、Netty异步模型了解及代码案例
一、概念1、异步和同步是相对的。当一个异步过程调用发出后,调用者不能立即得到结果。实际处理这个调用的组件完成后,通过状态、通知和回调来通知调用者。2、Netty中的I/O操作是异步的,包括Bind、Write 、Connect操作会简单的返回一个ChannelFuture3、调用者不能立即得到结果,而是通过Future-Listener 机制 ,用户可以方便的主动获取或者通过通知机制获得I/O操作结果。4、Netty的异步模型是建立在Future和Callback之上的。Callback就是原创 2020-05-24 11:56:15 · 202 阅读 · 0 评论 -
Netty学习笔记二十、Netty任务队列Task了解以及Netty再了解
一、用户自定义任务 // 用户自定义任务 该任务提交到scheduleTaskQueue 中 ctx.channel().eventLoop().schedule((() -> { try { Thread.sleep(10 * 1000); } catch (Exception e) { System.out.println("发生异常" + e.get原创 2020-05-24 10:58:29 · 555 阅读 · 0 评论 -
Netty学习笔记十八、Netty任务队列Task了解
一、使用场景了解1、用户程序自定义普通任务2、用户自定义定时任务3、非当前Reactor 线程调用Channel 的各种用法1)比如:推送任务系统的业务线程里面,根据用户的标识,找到对应的Channel 引用,然后调用Write 类方法向用户推送消息,就会进入到这种场景。最终的Write会提交到任务队列中后被异步消费。二、第一种自定义普通任务1、代码模拟阻塞 、是基于上一节笔记基础之上客户端会阻塞10s才会得到响应 /** * 读取数据(这里可以读取客.原创 2020-05-24 10:15:44 · 446 阅读 · 0 评论 -
Netty学习笔记十七、Netty模型代码现实(编写)
一描述1、Netty抽象出两组线程池BossGroup(专门负责接受客户端的连接)WorkerGroup专门负责网络的读写。2、BossGroup和WorkerGroup类型都是NioEventLoopGroup3、NioEventLoopGroup 相当于一个事件循环组,这个组含有多个事件循环,每一个事件循环是NioEventLoop4、NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上的socket的网络通讯。原创 2020-05-23 12:18:16 · 250 阅读 · 0 评论 -
Netty学习笔记十六、Netty模型基本概念
一、TCP网关Netty Server的IO模型创建ServerBootstrap,设定BossGroup与WorkerGroup线程池;bind指定的port,开始侦听和接受客户端链接(如果系统只有一个服务端port需要监听,则BossGroup线程组线程数设置为1);在ChannelPipeline注册childHandler,用来处理客户端链接中的请求帧。TCP网关使用Netty的线程池,共三组线程池,分别为BossGroup、WorkerGroup和ExecutorGroup。其中,Bos原创 2020-05-23 12:00:54 · 213 阅读 · 0 评论 -
Netty学习笔记十五、线程模式的了解
一、线程模型分类1、传统阻塞I/O服务模型2、Reactor模式1)单Reactor单线程2)单Reactor多线程3)主从Reactor多线程3、Netty线程模式(Netty主要基于主从Reactor多线程模型做了一定的改进,主从Reactor多线程模型有多个Reactor)二具体介绍1、传统阻塞I/O服务模型1)黄色代表对象2)浅蓝色代表线程3)白色表示方法(API)2、特点1)采用阻塞I/O模式获取输入的数据2)每个连接都需要独立的线程完成数据的输入,业务处理,数据返回原创 2020-05-22 22:30:05 · 318 阅读 · 0 评论 -
Netty学习笔记、学习网址推介
一、推介地址Netty学习地址《TCP/IP详解》读书笔记RocketMq学习地址中间件学习地址原创 2020-05-22 21:21:27 · 120 阅读 · 0 评论 -
Netty学习笔记十四、原生NIO问题与Netty基础认识
一、原生NIO存在的问题1、NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector 、ServerSocketChannel 、ByteBuffer等2、需要具备其他的额外技能:要熟悉Java多线程编程,因为NIO涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序3、开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓冲、网络拥塞和异常流的处理等等。4、JDK NIO的bug:例如臭名昭著的Epoll Bug ,它会导致Sele原创 2020-05-21 00:06:30 · 363 阅读 · 0 评论 -
Netty学习笔记十三、NIO与零拷贝代码理解
一、概念1、零拷贝从操作系统角度看,是没有cpu拷贝,既CPU拷贝数据很少可以忽略。二、代码package com.hao.demo.netty;import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.channels.FileChannel;import java.nio.channels.SocketChannel;原创 2020-05-19 23:57:21 · 184 阅读 · 0 评论 -
Netty学习笔记十二、NIO 网络编程应用-群聊系统代码实现
一、服务端package com.hao.demo.netty.groupchat;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.*;import java.util.Iterator;/** * @author haoxiansheng * @date 2020-05-18 */public cla原创 2020-05-18 20:55:38 · 176 阅读 · 0 评论 -
netty学习笔记十、Selector、Channel、Buffer关系说明,NIO原理浅谈
一、 Selector、Channel、Buffer关系1、每个Channel 都会对应一个Buffer2、Selector对应一个线程,一个线程对应多个channel连接3、channel注册到selector4、程序切换到channel需要有事件决定Event是一个重要的概念。5、Selector会根据不同的事件,在各个通道上切换。6、buffer就是一个内存块,底层有一个数组 byte[] hb;7、数据的读取写入是通过Buffer,BIO中的流只能读或写。Buffer可以调用flip(原创 2020-05-16 11:34:15 · 1152 阅读 · 0 评论 -
netty学习笔记十一、Selector小案例代码演示
一、客户端package com.hao.demo.netty.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SocketChannel;/** * @author haoxiansheng * @date 2020-05-15 */public class NIOClient { p原创 2020-05-16 11:33:28 · 213 阅读 · 0 评论 -
netty笔记学习九、基本概念整理Buffer、Channel、Selector
一、Buffer缓冲区1、是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以轻松低使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel提供从文件、网络读取数据的渠道,读取或写入的数据经过Buffer.NIO 程序 <===data===>缓冲区 <===channel===>文件2、Buffer是一个顶层父类,是一个抽象类。它有好多实现类。3、Buffer 属性 具体值的变化以及读写切换时下面原创 2020-05-16 11:10:31 · 212 阅读 · 0 评论 -
Netty学习笔记八、 Sacttering和Gathering代码演示
package com.hao.demo.netty.nio;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Arrays;/** * @author * @date 2020-05-13 */public c.原创 2020-05-14 23:37:46 · 191 阅读 · 0 评论 -
Netty学习笔记七、MappedByteBuffer使用代码
package com.hao.demo.netty.nio;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel;/** * @author haoxiansheng * @date 2020-05-12 * 可以让文件 在内存(堆外内存)修改,操作系统不需要拷贝一次 */pu.原创 2020-05-13 07:22:36 · 275 阅读 · 0 评论 -
netty学习笔记六、NIO、BIO、AIO 理解、分析、比较
一、I/O模型基本说明1、简单理解:用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。2、java 支持的三种网络编程模型I/O模式:NIO、BIO、AIO3、BIO 同步并阻塞(传统阻塞型)服务器实现模式为一个连接一个线程,即客户端有请求连接时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情就会造成不必要的线程开销。4、NIO(同步非阻塞)服务器实现模式为一个线程处理多个请求连接,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进原创 2020-05-12 00:09:46 · 338 阅读 · 0 评论 -
netty学习笔记五、使用transferFrom 完成文件拷贝
package com.hao.demo.netty.nio;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.channels.FileChannel;/** * @author haoxiansheng * @date 2020-05-11 */public class NIOFileChannel04 { public static void main(Strin.原创 2020-05-11 23:33:22 · 496 阅读 · 0 评论 -
netty学习笔记四、文件读取、写入代码实现
package com.hao.demo.netty.nio;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;/** * @author haoxiansheng * @date 2020-05-11 */public class NIOFileChannel03 { pu.原创 2020-05-11 23:32:18 · 1406 阅读 · 2 评论 -
netty学习笔记三、文件信息输出到控制台代码实现
package com.hao.demo.netty.nio;import java.io.File;import java.io.FileInputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;/** * @author haoxiansheng * @date 2020-05-11 */public class NIOFileChannel02 { /** * 文件信.原创 2020-05-11 23:31:22 · 344 阅读 · 0 评论 -
netty学习笔记二、文件写入代码
package com.hao.demo.netty.nio;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;/** * @author * @date 2020-05-11 */public class NIOFileChannel01 { /** * String 写入到文件 * 为了方便看异常抛出 实际应该捕获.原创 2020-05-11 23:30:08 · 312 阅读 · 0 评论 -
Netty学习笔记一、BIO代码分析
package com.hao.demo.netty;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author haoxiansheng * .原创 2020-05-08 19:07:10 · 160 阅读 · 0 评论