Netty
Netty
程序员劝退师-TAO
没事敲两行代码
展开
-
NIO实现客户端、服务端
NIO实现服务端import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterato原创 2021-06-28 00:25:02 · 625 阅读 · 0 评论 -
Selector、SelectionKey、ServerSocketChannel和SelectChannel关系
NIO非阻塞网络编程相关的(Selector、SelectionKay、ServerSocketChannel和SocketChannel)关系图如下说明当客户端连接时,会通过ServerSocketChannel 得到 SocketChannelSelector 进行监听 select 方法, 返回有事件发生的通道的个数.将socketChannel注册到Selector上, register(Selector sel, int ops), 一个selector上可以注册多个SocketCh原创 2021-06-27 23:35:41 · 409 阅读 · 0 评论 -
Selector API介绍
前言Selector是NIO编程中一个非常重要的核心组件,Selector类是一个抽象类,常用方法如下。原创 2021-06-27 16:35:11 · 228 阅读 · 0 评论 -
Selector介绍
基本介绍Java的NIO,用非阻塞的IO方式。可以用一个线程,处理多个客户端连接,就会使用Selector(选择器).Selector能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册在同一个Selector),如果有事件发生,便获取事件人后针对每个事件进行相应的处理,这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。只有在连接/通道真正发生读写事件时,才会进行读写,就大大的减少了系统开销,并且不比为每个连接都创建一个线程,不用去维护多个线避免了多原创 2021-06-26 15:22:15 · 967 阅读 · 0 评论 -
Buffer的分散和聚集
介绍前面几篇文章有Buffer的读写,都是通过一个个Buffer来完成的,NIO还支持通过多个Buffer(即Buffer数组)完成读写操作,即Scattering和Gathering来完成Buffer的分散和聚集核心/核心 我们可以建立一个ByteBuffer数组 数组中存放buffer,当我们写入数据时第一个写满了可以将剩余的数据存放到ByteBuffer数组中的下一个,读取的时候也可以依次读ByteBuffer数组中的Buffer ByteBuffer[] buffer = new Byte原创 2021-06-23 02:44:42 · 227 阅读 · 0 评论 -
MappedByteBuffer
MappedByteBuffer介绍MappedByteBuffer与ByteBuffer关系MappedByteBuffer是继承ByteBuffer的,MappedByteBuffer下有又如下实现类MappedByteBuffer优点MappedByteBuffer可以让文件直接在内存中修改(堆外内存)操作系统不需要再次拷贝,而如何同步到文件由NIO 来完成,MappedByteBuffer性能是比较高的实例代码/** * @description: MappedByteBuffer原创 2021-06-23 02:19:48 · 218 阅读 · 0 评论 -
Buffer 只读
Buffer 只读可以将一个普通Buffer 转成只读Buffer/** * @author TAO * @description: 只读buffer * @date 2021/6/21 1:46 */public class ReadOnlyBuffer { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(64); for (int i原创 2021-06-21 01:51:56 · 126 阅读 · 0 评论 -
Buffer类型化
Buffer类型化ByteBuffer 支持类型化的put 和 get, put 放入的是什么数据类型,get就应该使用相应的数据类型来取出,否则可能有 BufferUnderflowException 异常。public class NIOByteBufferPutGet { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(64); //放入原创 2021-06-21 01:50:08 · 85 阅读 · 0 评论 -
Channel基本介绍
基本介绍1.NIO的通道类似于流,但有些区别如下通道可以同时进行读写,而流只能读或者只能写通道可以实现异步读写数据通道可以从缓冲读数据,也可以写数据到缓冲:2.BIO 中的 stream 是单向的,例如 FileInputStream 对象只能进行读取数据的操作,而 NIO 中的通道(Channel)是双向的,可以读操作,也可以写操作。3.Channel在NIO中是一个接口public interface Channel extends Closeable{}4.常用的 Channe原创 2021-06-07 23:21:31 · 7363 阅读 · 1 评论 -
Buffer的机制及子类
Buffer基本介绍缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松地使用内存块,,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由 Buffer,如图:Buffer类及其子类在 NIO 中,Buffer 是一个顶层父类,它是一个抽象类, 类的层级关系图:在这几个实现类中都有一个hb当前类型的数组,实际上数据就是存储在这原创 2021-06-06 23:07:24 · 461 阅读 · 0 评论 -
NIO三大核心组件关系
NIO三大核心原理示意图说明:每个Channel都会对应一个BufferSelector对应一个线程,一个线程对应多个Channel连接上图反应有三个Channel注册到Selector上程序切换到那个Channel是有事件决定的,Event就是一个总要的概念Selector会根据不同的事件,在各个通道上切换Buffer就是一个内存块,底层是有一个数组数据的读写是通过Buffer,这个和BIO不同,BIO中要么是输入流,要么是输出流,不能双向,但是NIO的Buffer是可以读,也可以写,原创 2021-06-06 22:32:42 · 196 阅读 · 1 评论 -
NIO和BIO比较
1.BIO 以流的方式处理数据,而 NIO 以块的方式处理数据,块 I/O 的效率比流 I/O 高很多2.BIO 是阻塞的,NIO 则是非阻塞的3.BIO基于字节流和字符流进行操作,而 NIO 基于 Channel(通道)和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个客户端通道...原创 2021-06-06 22:25:04 · 321 阅读 · 0 评论 -
Buffer基本使用
Buffer基本使用public class BasicBuffer { public static void main(String[] args) { //举例说明Buffer 的使用 //创建一个Buffer,大小为5,即可存放5个int IntBuffer intBuffer = IntBuffer.allocate(5); //向Buffer中存放数据 //intBuffer.put(10);原创 2021-06-06 22:23:03 · 1878 阅读 · 0 评论 -
Java NIO
Java NIO基本介绍1.Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的2.NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。3.NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器)Channel可以简单的理解为BIO中的s原创 2021-06-06 21:58:25 · 72 阅读 · 0 评论 -
Netty-应用场景
互联网行业1. 互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。2.典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信游戏行业1.无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用2.Netty 作为高性能的基础通信转载 2021-06-04 23:53:42 · 896 阅读 · 0 评论 -
Netty-介绍
Netty介绍1.Netty是由JBOSS提供的一个Java开源框架,现在为GitHub上的独立项目2.Netty是一个异步的、基于事件驱动的网络应用框架,用来快速开发高性能、高可靠的网络IO程序异步的异步是相对于同步而言的,举个简单例子,在传统的B/S开发领域,在没有Ajax之前采用Ajax后事件驱动举个简单例子:比如说一个网页,网页上有个按钮,当我们点击这个按钮以后呢,就会触发一个click事件,这个事件会驱动一个方法并调用,那么这就是一个事件驱动的模型,在Netty里面也是基于原创 2021-06-04 23:47:11 · 125 阅读 · 0 评论 -
Netty-学习前提说明
前提技术铺垫Netty在Java领域算的上是中高阶的技术,那么学习Netty需要如下一些知识储备掌握Java OOP编程账务Java 多线程编程掌握Java IO编程掌握Java 网络编程常用的Java设计模式(观察者模式、命令模式、责任链模式)常用的数据结构(链表,因为Netty中有一个非常核心的组件Pipeline,Pipeline的底层使用的就是双向链表)源码阅读Netty是用来处理网络高并发的框架,为什么能做到这一点呢,那么要阅读Netty的源码,因为Netty不同于其他重功能原创 2021-06-04 22:49:17 · 289 阅读 · 0 评论 -
Java BIO
Java BIO 基本介绍Java BIO 就是传统的 Java I/O 编程,其相关的类和接口在 java.io。BIO(BlockingI/O):同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,程序简单易理解。Java原创 2021-05-11 23:48:58 · 104 阅读 · 0 评论 -
IO的发展历程,AIO、BIO、NIO
s原创 2020-05-05 22:33:16 · 1155 阅读 · 3 评论 -
IO模型
I/O 模型I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。Java 共支持 3 种网络编程模型 I/O 模式:BIO、NIO、AIO。Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。Java NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮原创 2021-05-11 23:05:27 · 106 阅读 · 0 评论 -
Netty常见面试题
概览:Netty 是什么?为什么要用 Netty?Netty 应用场景了解么?Netty 核心组件有哪些?分别有什么作用?EventloopGroup 了解么?和 EventLoop 啥关系?Bootstrap 和 ServerBootstrap 了解么?NioEventLoopGroup 默认的构造函数会起多少线程?Netty 线程模型了解么?Netty 服务端和客户端的启动过程了解么?Netty 长连接、心跳机制了解么?Netty 的零拷贝了解么?Netty 是什么?Ne原创 2021-03-08 00:42:55 · 480 阅读 · 0 评论