Netty
文章平均质量分 80
Netty基础
吴声子夜歌
个人学习记录
展开
-
Netty——WebSocket开发
WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通信的网络技术,WebSocket通信协议于2011年被IETF定为RFC6455,WebSockeet API被W3C定为标准。在WebSocket API中,浏览器和服务器只需要做一个握手动作,然后浏览器和服务器之间就行程了一条快速通道,两者就可以直接相互传送数据了。WebSocket基于TCP双向全双工进行消息传递,在同一时刻,既可以发送消息,,也可以接收消息,相比HTTP的半双工协议,性能得到很大提升。原创 2023-07-29 15:49:12 · 1894 阅读 · 0 评论 -
Netty——预置的ChannelHandler和编解码器(二)
空闲的连接和超时原创 2020-06-17 13:58:48 · 474 阅读 · 0 评论 -
Netty——预置的ChannelHandler和编解码器(一)
预置的ChannelHandler和编解码器Netty 为许多通用协议提供了编解码器和处理器,几乎可以开箱即用,这减少了你在那些相 当繁琐的事务上本来会花费的时间与精力。在本章中,我们将探讨这些工具以及它们所带来的好 处,其中包括 Netty 对于 SSL/TLS 和 WebSocket 的支持,以及如何简单地通过数据压缩来压榨 HTTP,以获取更好的性能。通过SSL/TLS保护Netty应用程序为了支持 SSL/TLS,Java 提供了 javax.net.ssl 包,它的 SSLContext 和原创 2020-06-17 00:50:04 · 443 阅读 · 0 评论 -
Netty——编解码器
什么是编解码器每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和 目标应用程序的数据格式做相互转换。这种转换逻辑由编解码器处理,编解码器由编码器和解码 器组成,它们每种都可以将字节流从一种格式转换为另一种格式。那么它们的区别是什么呢?如果将消息看作是对于特定的应用程序具有具体含义的结构化的字节序列——它的数据。编码器是将消息转换为适合于传输的格式(最有可能的就是字节流);解码器则是将 网络字节流转换回应用程序的消息格式。因此,编码器操作出站数据,而解码器处理入站原创 2020-06-16 21:55:25 · 558 阅读 · 0 评论 -
Netty——EmbeddedChannel类
EmbeddedChannel类Netty 提供了它所谓的 Embedded 传输,用于测试 ChannelHandler。这个传输是一种特殊的 Channel 实现— EmbeddedChannel— 的功能,这个实现提供了通过 ChannelPipeline 传播事件的简便方法。这个想法是直截了当的:将入站数据或者出站数据写入到 EmbeddedChannel 中,然后检 查是否有任何东西到达了 ChannelPipeline 的尾端。以这种方式,你便可以确定消息是否已 经被编码或者被解码过了,以及原创 2020-06-16 16:00:29 · 2515 阅读 · 1 评论 -
Netty——Bootstrap类
Bootstrap类引导类的层次结构包括一个抽象的父类和两个具体的引导子类:相对于将具体的引导类分别看作用于服务器和客户端的引导来说,记住它们的本意是用来支撑不同的应用程序的功能的将有所裨益。也就是说,服务器致力于使用一个父 Channel 来接受来自客户端的连接,并创建子 Channel 以用于它们之间的通信;而客户端将最可能只需要一个 单独的、没有父 Channel 的 Channel 来用于所有的网络交互。(正如同我们将要看到的,这也适用于无连接的传输协议,如 UDP,因为它们并不是每个连接都需原创 2020-06-16 01:33:47 · 450 阅读 · 0 评论 -
Netty——EventLoop和线程模型
线程模型概述基本的线程池化模式可以描述为:从池的空闲线程列表中选择一个 Thread,并且指派它去运行一个已提交的任务(一个Runnable 的实现);当任务完成时,将该 Thread 返回给该列表,使其可被重用。虽然池化和重用线程相对于简单地为每个任务都创建和销毁线程是一种进步,但是它并不能 消除由上下文切换所带来的开销,其将随着线程数量的增加很快变得明显,并且在高负载下愈演 愈烈。此外,仅仅由于应用程序的整体复杂性或者并发需求,在项目的生命周期内也可能会出现 其他和线程相关的问题。Eve原创 2020-06-15 17:51:56 · 403 阅读 · 0 评论 -
Netty——ChannelHandlerContext
ChannelHandlerContext接口ChannelHandlerContext 代表了 ChannelHandler 和 ChannelPipeline 之间的关 联,每当有 ChannelHandler 添加到 ChannelPipeline 中时,都会创建 ChannelHandler- Context。ChannelHandlerContext 的主要功能是管理它所关联的 ChannelHandler 和在 同一个 ChannelPipeline 中的其他 ChannelHandler 之原创 2020-06-15 15:34:05 · 5571 阅读 · 1 评论 -
Netty——ChannelHandler和ChannelPipeline
ChannelHandlerChannel的生命周期:Interface Channel 定义了一组和 ChannelInboundHandler API 密切相关的简单但 功能强大的状态模型,下表列出了 Channel 的这 4 个状态:当这些状态发生改变时,将会生成对应的事件。 这些事件将会被转发给 ChannelPipeline 中的 ChannelHandler,其可以随后对它们做出响应。ChannelHandler的生命周期:在 ChannelHandler 被添加到 Channe原创 2020-06-15 13:08:51 · 253 阅读 · 0 评论 -
Netty——ByteBuf的API
ByteBuf正如前面所提到的,网络数据的基本单位总是字节。Java NIO 提供了 ByteBuffer 作为它 的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐。Netty 的 ByteBuffer 替代品是 ByteBuf,一个强大的实现,既解决了 JDK API 的局限性, 又为网络应用程序的开发者提供了更好的 API。Netty 的数据处理 API 通过两个组件暴露——abstract class ByteBuf 和 interface ByteBufHolder。优点:它可以被原创 2020-06-15 10:15:50 · 1222 阅读 · 0 评论 -
Netty——传输API
传输API传输 API 的核心是 interface Channel,它被用于所有的 I/O 操作。Channel 类的层次结构如图所示:如图所示,每个 Channel 都将会被分配一个 ChannelPipeline 和 ChannelConfig。 ChannelConfig 包含了该 Channel 的所有配置设置,并且支持热更新。由于特定的传输可能 具有独特的设置,所以它可能会实现一个 ChannelConfig 的子类型。(请参考 ChannelConfig 实现对应的 Javadoc。)原创 2020-06-14 21:33:53 · 443 阅读 · 0 评论 -
ChannelHandler和ChannelPipeline
ChannelHandler接口从应用程序开发人员的角度来看,Netty 的主要组件是 ChannelHandler,它充当了所有 处理入站和出站数据的应用程序逻辑的容器。这是可行的,因为ChannelHandler 的方法是 由网络事件触发的。事实上,ChannelHandler 可专 门用于几乎任何类型的动作,例如将数据从一种格式转换为另外一种格式,或者处理转换过程 中所抛出的异常。举例来说,ChannelInboundHandler 是一个你将会经常实现的子接口。这种类型的 ChannelHand原创 2020-06-14 16:31:53 · 314 阅读 · 0 评论 -
Netty--编码器和handler的调用机制
编码器和handler的调用机制netty 的组件设计:Netty 的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现 ChannelInboundHandler 接口(或 ChannelInboundHandlerAdap...原创 2020-02-17 14:44:23 · 552 阅读 · 0 评论 -
Netty--心跳机制检测示例
编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲当服务器超过5秒没有写操作时,就提示写空闲实现当服务器超过7秒没有读或者写操作时,就提示读写空闲public class MyServer { public static void main(String[] args) throws Exception{ //创建两个线程组 ...原创 2020-02-17 12:00:26 · 289 阅读 · 0 评论 -
Netty--Unpooled类
Unpooled类Netty 提供一个专门用来操作缓冲区(即 Netty 的数据容器)的工具类。常用方法:ByteBuf的结构:示例public class NettyByteBuf01 { public static void main(String[] args) { //创建一个ByteBuf //说明 //1. 创建...原创 2020-02-16 23:14:18 · 7203 阅读 · 6 评论 -
Netty--核心模块组件
Bootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。常见的方法有public ServerBootstrap group(Event...原创 2020-02-16 22:35:17 · 284 阅读 · 0 评论 -
Netty--异步模型
异步模型异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在 完成后,通过状态、通知和回调来通知调用者。Netty 中的 I/O 操作是异步的,包括 Bind、Write、Connect 等操作会简单的返回一个 ChannelFuture。调用者并不能立刻获得结果,而是通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知...原创 2020-02-16 16:54:01 · 358 阅读 · 0 评论 -
Netty--Task的三种使用场景
Task 有 3 种典型使用场景用户程序自定义的普通任务 [举例说明]用户自定义定时任务非当前 Reactor 线程调用 Channel 的各种方法例如在推送系统的业务线程里面,根据用户的标识,找到对应的 Channel 引用,然后调用 Write 类方法向该用户推送消息,就会进入到这种场景。最终的 Write 会提交到任务队列中后被异步消费/*说明1. 我们自定义一个Handl...原创 2020-02-16 16:26:14 · 800 阅读 · 0 评论 -
Netty---入门实例(TCP)
服务端:public class NettyServer { public static void main(String[] args) throws Exception { //创建 BossGroup 和 WorkerGroup //说明 //1. 创建两个线程组 bossGroup 和 workerGroup //2. bossGroup 只是处理连接请求 , 真正的和...原创 2020-02-16 14:59:11 · 336 阅读 · 0 评论 -
Netty--Netty模型
Netty模型工作原理示意图:(简单版)Netty 主要基于主从 Reactors 多线程模型(如图)做了一定的改进,其中主从 Reactor 多线程模型有多个 ReactorBossGroup 线程维护 Selector , 只关注 Accecpt当接收到Accept事件,获取到对应的SocketChannel,封装成NIOScoketChannel并注册到Worker线程(事件循...原创 2020-02-16 13:51:17 · 396 阅读 · 1 评论 -
Netty--Reactor模式
Reactor模式针对传统阻塞 I/O 服务模型的 2 个缺点,解决方案:基于 I/O 复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连 接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理 Reactor 对应的叫法: 1. 反应器模式 2. 分发者模式(Dispatcher) 3. 通知者模式(notifi...原创 2020-02-16 01:43:01 · 325 阅读 · 0 评论 -
NIO--零拷贝、AIO
零拷贝零拷贝是网络编程的关键,很多性能优化都离不开。在 Java 程序中,常用的零拷贝有 mmap(内存映射) 和 sendFile。传统IO数据读写:Java 传统 IO 和 网络编程的一段代码传统IO模型:mmap优化:mmap 通过内存映射,将文件映射到内核缓冲区,同时,用户空间可以共享内核空间的数据。这样,在进行网 络传输时,就可以减少内核空间到用户空间的拷贝次数。...原创 2020-02-15 21:54:14 · 764 阅读 · 0 评论 -
Netty--NIO
NIOJava NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。【基本案例】NIO 有三大核心部分:Channel(通道),...原创 2020-02-15 18:52:05 · 280 阅读 · 0 评论 -
Netty--BIO
I/O模型I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能Java 共支持 3 种网络编程模型/IO 模式:BIO、NIO、AIOJava BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器 端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销Java NIO : ...原创 2020-02-15 11:17:48 · 476 阅读 · 0 评论 -
Netty--概述
NettyNetty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下,面向 Clients 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的 应用。Netty 本质是一个 NIO 框架,...原创 2020-02-15 11:12:25 · 248 阅读 · 0 评论