![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
netty学习笔记
文章平均质量分 58
还算小萌新?
加油
展开
-
Netty 10.3 Log4j 整合到Netty
Netty 10.3 Log4j 整合到Netty在Maven 中添加对Log4j的依赖 在 pom.xml配置 Log4j , 在 resources/log4j.properties<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17<原创 2020-07-27 16:33:57 · 337 阅读 · 0 评论 -
Netty学习笔记 10.2 解码器-ReplayingDecoder(实例)
Netty学习笔记 10.2 解码器-ReplayingDecoderpublic abstract class ReplayingDecoder extends ByteToMessageDecoderReplayingDecoder扩展了ByteToMessageDecoder类,使用这个类,我们不必调用readableBytes()方法。参数S指定了用户状态管理的类型,其中Void代表不需要状态管理应用实例:使用ReplayingDecoder 编写解码器,对前面的案例进行简化 [案例演示]R原创 2020-07-27 15:50:02 · 527 阅读 · 0 评论 -
Netty学习笔记 10.2 Netty的handler链的调用机制
Netty学习笔记 10.2 Netty的handler链的调用机制实例要求:使用自定义的编码器和解码器来说明Netty的handler 调用机制客户端发送long -> 服务器服务端发送long -> 客户端案例演示结论不论解码器handler 还是 编码器handler 即接收的消息类型必须与待处理的消息类型一致,否则该handler不会被执行在解码器 进行数据解码时,需要判断 缓存区(ByteBuf)的数据是否足够 ,否则接收到的结果会期望结果可能不一致MyBy原创 2020-07-27 15:47:36 · 429 阅读 · 0 评论 -
Netty学习笔记 10 Netty编解码器和handler的调用机制
Netty学习笔记 10 Netty编解码器和handler的调用机制基本说明netty的组件设计:Netty的主要组件有Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe等ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送响原创 2020-07-27 15:40:22 · 260 阅读 · 0 评论 -
Netty学习笔记 9.3 Protobuf快速入门实例2
Protobuf快速入门实例2编写程序,使用Protobuf完成如下功能客户端可以随机发送Student PoJo/ Worker PoJo 对象到服务器 (通过 Protobuf 编码)服务端能接收Student PoJo/ Worker PoJo 对象(需要判断是哪种类型),并显示信息(通过 Protobuf 解码)syntax = "proto3";option optimize_for = SPEED; // 加快解析option java_package="com.atguigu.n原创 2020-07-27 15:21:24 · 179 阅读 · 1 评论 -
Netty学习笔记 9.2 Protobuf快速入门实例1
Netty学习笔记 9.2 Protobuf快速入门实例编写程序,使用Protobuf完成如下功能客户端可以发送一个Student PoJo 对象到服务器 (通过 Protobuf 编码)服务端能接收Student PoJo 对象,并显示信息(通过 Protobuf 解码)代码具体信息请查看注释配置protosyntax = "proto3"; //版本option java_outer_classname = "StudentPOJO";//生成的外部类名,同时也是文件名//prot原创 2020-07-27 12:33:27 · 213 阅读 · 0 评论 -
Netty学习笔记 9.1 goole protobuf理论介绍
Netty学习笔记 9 goole protobuf编码和解码的基本介绍编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码 [示意图]codec(编解码器) 的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器原创 2020-07-27 12:27:45 · 144 阅读 · 0 评论 -
Netty学习笔记 8 Netty 通过WebSocket编程实现服务器和客户端长连接
通过WebSocket编程实现服务器和客户端长连接MyServerpackage com.my.netty.websocket;import com.atguigu.netty.heartbeat.MyServerHandler;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import原创 2020-07-27 11:42:11 · 146 阅读 · 0 评论 -
Netty学习笔记 7 Netty心跳检测机制案例
实例要求:编写一个 Netty心跳检测机制案例, 当服务器超过3秒没有读时,就提示读空闲当服务器超过5秒没有写操作时,就提示写空闲实现当服务器超过7秒没有读或者写操作时,就提示读写空闲MyServerpackage com.my.netty.heartbeat;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelIniti原创 2020-07-27 11:14:32 · 145 阅读 · 0 评论 -
Netty学习笔记 6 Netty应用实例-群聊系统
Netty应用实例-群聊系统实例要求:编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)目的:进一步理解Netty非阻塞网络编程机制GroupChatServerpackage com.my.netty.groupchat;import io.netty.bootstrap.原创 2020-07-27 10:41:01 · 211 阅读 · 0 评论 -
Netty 学习笔记 5核心模块组件三 (Unpooled 类)、案例一、二
UnpooledNetty 提供一个专门用来操作缓冲区(即Netty的数据容器)的工具类常用方法如下所示举例说明Unpooled 获取 Netty的数据容器ByteBuf 的基本使用 【案例演示】package com.my.netty.buf;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;public class NettyByteBuf01 { public static void main(S原创 2020-07-27 10:17:15 · 371 阅读 · 0 评论 -
Netty学习笔记 5核心模块二 (Pipeline 和 ChannelPipeline、ChannelHandlerContext、ChannelOption、EventLoopGroup及实现类)
Pipeline 和 ChannelPipelineChannelPipeline 是一个重点:ChannelPipeline 是一个 Handler 的集合,它负责处理和拦截 inbound 或者 outbound 的事件和操作,相当于一个贯穿 Netty 的链。(也可以这样理解:ChannelPipeline 是 保存 ChannelHandler 的 List,用于处理或拦截 Channel 的入站事件和出站操作)ChannelPipeline 实现了一种高级形式的拦截过滤器模式,使用户可以完全原创 2020-07-27 10:12:28 · 304 阅读 · 0 评论 -
Netty学习笔记 5 核心模块组件一(Bootstrap、ServerBootstrap、Future、ChannelFuture、Channel、Selector、ChannelHandler)
Netty学习笔记 Bootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类常见的方法有public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup原创 2020-07-27 10:07:37 · 288 阅读 · 0 评论 -
Netty学习笔记 4.5 快速入门实例-HTTP服务
Netty学习笔记 4.5 快速入门实例-HTTP服务实例要求:使用IDEA 创建Netty项目Netty 服务器在 6668 端口监听,浏览器发出请求 "http://localhost:6668/ "服务器可以回复消息给客户端 "Hello! 我是服务器 5 " , 并对特定请求资源进行过滤.目的:Netty 可以做Http服务开发,并且理解Handler实例和客户端及其请求的关系.TestServerpackage com.my.netty.http;import io.nett原创 2020-07-27 09:55:23 · 188 阅读 · 0 评论 -
Netty学习笔记 4.4 异步模型
Netty学习笔记 4.4 异步模型基本介绍异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。Netty 中的 I/O 操作是异步的,包括 Bind、Write、Connect 等操作会简单的返回一个 ChannelFuture。调用者并不能立刻获得结果,而是通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果Netty 的异步模型是建立在 future 和 c原创 2020-07-27 09:44:29 · 116 阅读 · 0 评论 -
Netty学习笔记 4.3 Netty快速入门实例-TCP服务
Netty学习笔记 4.3 Netty快速入门实例-TCP服务实例要求:使用IDEA 创建Netty项目Netty 服务器在 6668 端口监听,客户端能发送消息给服务器 “hello, 服务器~”服务器可以回复消息给客户端 “hello, 客户端~”目的:对Netty 线程模型 有一个初步认识, 便于理解Netty 模型理论NettyServerpackage com.my.netty.simple;import io.netty.bootstrap.ServerBootstrap;im原创 2020-07-27 09:41:13 · 184 阅读 · 0 评论 -
Netty学习笔记 4.2 Netty高性能架构设计
Netty学习笔记 4.2 Netty高性能架构设计线程模型基本介绍不同的线程模式,对程序的性能有很大影响,为了搞清Netty 线程模式,我们来系统的讲解下 各个线程模式, 最后看看Netty 线程模型有什么优越性.目前存在的线程模型有:传统阻塞 I/O 服务模型 Reactor 模式根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现单 Reactor 单线程;单 Reactor 多线程;主从 Reactor 多线程Netty 线程模式(Netty 主要基于主原创 2020-07-27 09:21:47 · 192 阅读 · 0 评论 -
Netty学习笔记 4.1 Netty概述
Netty学习笔记 4.1 Netty概述原生NIO存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等原创 2020-07-27 09:13:52 · 219 阅读 · 0 评论 -
Netty学习笔记 3.12 Java AIO 基本介绍
Netty学习笔记 3.12 Java AIO 基本介绍JDK 7 引入了 Asynchronous I/O,即 AIO。在进行 I/O 编程中,常用到两种模式:Reactor和 Proactor。Java 的 NIO 就是 Reactor,当有事件触发时,服务器端得到通知,进行相应的处理AIO 即 NIO2.0,叫做异步不阻塞的 IO。AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用原创 2020-07-26 21:07:17 · 136 阅读 · 0 评论 -
Netty学习笔记 3.11 NIO与零拷贝
Netty学习笔记 3.11 NIO与零拷贝零拷贝基本介绍零拷贝是网络编程的关键,很多性能优化都离不开。在 Java 程序中,常用的零拷贝有 mmap(内存映射) 和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?我们分析 mmap 和 sendFile 这两个零拷贝另外我们看下NIO 中如何使用零拷贝传统IO数据读写Java 传统 IO 和 网络编程的一段代码//定义一个File类型的file为test.txtFile file = new File("test.原创 2020-07-26 21:03:51 · 153 阅读 · 0 评论 -
Netty学习笔记 3.10 NIO 网络编程应用实例-群聊系统
Netty学习笔记 3.10 NIO 网络编程应用实例-群聊系统实例要求:编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)目的:进一步理解NIO非阻塞网络编程机制Server 端服务器接收到消息 时间: [2019-09-29 12:02:35] -> 服务器 ok…1原创 2020-07-26 20:54:04 · 2604 阅读 · 0 评论 -
Netty学习笔记 3.9 NIO 非阻塞 网络编程原理分析图快速入门
Netty学习笔记 3.9 NIO 非阻塞 网络编程原理分析图NIO 非阻塞 网络编程相关的(Selector、SelectionKey、ServerScoketChannel和SocketChannel) 关系梳理图对右图的说明:当客户端连接时,会通过ServerSocketChannel 得到 SocketChannelSelector 进行监听 select 方法, 返回有事件发生的通道的个数.将socketChannel注册到Selector上, register(Selector s原创 2020-07-26 19:56:26 · 443 阅读 · 2 评论 -
Netty学习笔记 3.8 选择器
Netty学习笔记 3.8 选择器Selector(选择器)基本介绍Java 的 NIO,用非阻塞的 IO 方式。可以用一个线程,处理多个的客户端连接,就会使用到Selector(选择器)Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。【示意图】只有在 连接/通道 真正有读写事件发生时,才会进行原创 2020-07-26 14:05:29 · 291 阅读 · 0 评论 -
Netty学习笔记 3.7 关于Buffer 和 Channel的注意事项和细节
Netty学习笔记 3.7 关于Buffer 和 Channel的注意事项和细节ByteBuffer 支持类型化的put 和 get, put 放入的是什么数据类型,get就应该使用相应的数据类型来取出,否则可能有 BufferUnderflowException 异常。[举例说明]package com.my.nio;import java.nio.ByteBuffer;public class NIOByteBufferPutGet { public static void main原创 2020-07-26 14:02:13 · 182 阅读 · 0 评论 -
Netty学习笔记 3.6 应用实例4-拷贝文件transferFrom 方法
应用实例4-拷贝文件transferFrom 方法实例要求:使用 FileChannel(通道) 和 方法 transferFrom ,完成文件的拷贝拷贝一张图片代码演示为方便自我查看及分类具体代码注释及上文请查看我得上一篇博客Netty学习笔记 3.5 应用实例3-使用一个Buffer完成文件读取package com.my.nio;import java.io.FileInputStream;import java.io.FileOutputStream;import java原创 2020-07-26 13:56:55 · 569 阅读 · 0 评论 -
Netty学习笔记 3.5 应用实例3-使用一个Buffer完成文件读取
应用实例3-使用一个Buffer完成文件读取实例要求:使用 FileChannel(通道) 和 方法 read , write,完成文件的拷贝拷贝一个文本文件 1.txt , 放在项目下即可代码演示package com.atguigu.nio;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileCh原创 2020-07-26 13:54:32 · 234 阅读 · 0 评论 -
Netty学习笔记 3.4应用实例2-本地文件读数据
应用实例2-本地文件读数据实例要求:使用前面学习后的ByteBuffer(缓冲) 和 FileChannel(通道), 将 file01.txt 中的数据读入到程序,并显示在控制台屏幕假定文件已经存在代码演示为方便自我查看及分类具体代码注释及上文请查看我得上一篇博客Netty学习笔记 3.3 应用实例1-本地文件写数据package com.my.nio;import java.io.File;import java.io.FileInputStream;import java.nio原创 2020-07-26 13:46:20 · 401 阅读 · 0 评论 -
Netty学习笔记 3.3 应用实例1-本地文件写数据
应用实例1-本地文件写数据实例要求:使用前面学习后的ByteBuffer(缓冲) 和 FileChannel(通道), 将 “hello,netty” 写入到file01.txt 中文件不存在就创建代码演示package com.my.nio;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;public class NIOFileChannel原创 2020-07-26 13:42:04 · 270 阅读 · 0 评论 -
Netty学习笔记 3.2 NIO和BIO比较及原理示意图
Netty学习笔记 3.2 NIO和BIO比较及原理示意图NIO 和 BIO 的比较BIO 以流的方式处理数据,而 NIO 以块的方式处理数据,块 I/O 的效率比流 I/O 高很多BIO 是阻塞的,NIO 则是非阻塞的BIO基于字节流和字符流进行操作,而 NIO 基于 **Channel(通道)和 Buffer(缓冲区)**进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个原创 2020-07-26 13:35:51 · 626 阅读 · 3 评论 -
Netty学习笔记 3.1 Java NIO 编程
Netty学习笔记 3.1 Java NIO 编程Java NIO 基本介绍Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。【基本案例】NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(原创 2020-07-26 13:26:36 · 128 阅读 · 0 评论 -
Netty学习笔记 2.2 BIO应用实例(案例+超详细注释)
Netty学习笔记 2.2 BIO应用实例实例说明:使用BIO模型编写一个服务器端,监听6666端口,当有客户端连接时,就启动一个线程与之通讯。要求使用线程池机制改善,可以连接多个客户端.服务器端可以接收客户端发送的数据(telnet 方式即可)。package com.atguigu.bio;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.c原创 2020-07-26 11:17:08 · 166 阅读 · 0 评论 -
Netty学习笔记 2.1 Java BIO编程
Netty学习笔记 2.1 Java BIO编程如果有所侵权,请联系删除,谢谢!I/O模型I/O 模型基本说明I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能Java共支持3种网络编程模型/IO模式:BIO、NIO、AIOJava BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 【简单示意图】Java NIO : 同步非原创 2020-07-26 10:43:24 · 134 阅读 · 0 评论 -
Netty学习笔记 一、Netty介绍和应用场景
学习要求今天开始记录新的学习笔记,在整理老师笔记的同时加入自己的实践经历,为自己以后复习查看做好准备,同时分享出来供同样想学习的人做一点参考。如果有所侵权,请联系删除,谢谢!要求已经掌握了 Java 编程, 主要技术构成: Java OOP 编程、Java 多线程编程、Java IO 编程 、Java 网络编程、常用的Java 设计模式(比如 观察者模式 ,命令模式,职责链模式 )、常用的数据结构(比如 链表)要求学员最好有项目开发和阅读源码的经历。Netty的介绍Netty 是由 JBOS原创 2020-07-26 10:30:57 · 221 阅读 · 0 评论