![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty
皓晨的架构笔记
生命不息,奋斗不止!
展开
-
Netty剖析之心跳检测机制
什么是心跳检测机制?心跳检测机制就是服务端会定时向客户端发送一个心跳检测包,或者客户端向服务端发送,以确保连接的有效性机制。Netty提供了IdleStateHandler来进行心跳检测IdleStateHandlerIdleStateHandler是Netty提供的空闲状态处理器参数说明:readerIdleTime:读的空闲时间,超出此时间就会发送一个心跳检测包,检测是否连接w...原创 2020-02-04 12:27:54 · 393 阅读 · 0 评论 -
Netty剖析之Netty群聊系统
前言在前面我们讲解了Netty的基本使用,本次我们将使用Netty来完成一个群聊系统,实现服务器端和客户端之间的数据简单通讯;群聊系统基本要求:服务器端可监测客户端上线、离线、并转发客户端消息;客户端可群发消息给其它用户,也可接收其它客户发送的消息;代码示例服务端:public class GroupChatServer { private String host; ...原创 2020-02-04 12:27:05 · 506 阅读 · 0 评论 -
Netty剖析之Netty核心组件介绍
Bootstrap、ServerBootstrapBootstrap意为引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个Netty程序,串联各个组件,Netty中Bootstrap类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。常用方法:方法名描述public ServerBootstrap group(...原创 2020-02-04 12:26:09 · 285 阅读 · 0 评论 -
Netty剖析之Http服务案例
前言前面我们讲了Netty的线程模型,还有一些Netty的特性,以及使用Netty编写过一个Tcp服务案例,本次呢,我们将结合前面所学的知识,来编写一个Http服务案例Http服务案例需求:使用Netty编写一个Http服务端,可以让浏览器正常访问,并且服务端可以返回信息给浏览器。服务端代码基本与前面的TCP服务一致,只是在pipeline管道里额外加入了处理http的编码、解码器(Htt...原创 2020-02-03 12:20:50 · 181 阅读 · 0 评论 -
Netty剖析之Netty异步模型
异步模型基本介绍异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知、回调来通知调用者。Netty中IO操作是异步的,包括Bind,write,connect等操作会简单的返回一个channelFuture调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作...原创 2020-02-03 12:20:00 · 286 阅读 · 0 评论 -
Netty剖析之Netty任务队列
前言在前面我们有讲到,在使用Netty的时候,我们的业务处理都是放到我们自定义的handler里面,那么如果handler里面有一些执行比较耗时的操作的话,依旧会出现线程阻塞的情况,那么怎么来处理呢?我们可以回过头去看看Netty的模型图,里面有一块是TaskQueue,这个呢就是Netty提供给我们的任务队列,可以用来异步处理任务,它是和channel一一绑定的。自定义普通任务通过Chan...原创 2020-02-02 22:24:16 · 2522 阅读 · 2 评论 -
Netty剖析之Netty线程模型
线程模型基本介绍不同的线程模式,对程序的性能有很大影响,为了搞清Netty线程模式,下面我们来系统的讲解下各个线程模式。目前存在的线程模型有:传统阻塞IO服务模型Reactor 模式,根据 Reactor 的数量和处理资源池线程的数量不同,有3种典型的实现:2.1 单Reactor单线程2.2 单Reactor多线程2.3 主从Reactor多线程Netty线程模式(Netty主...原创 2020-02-02 21:55:19 · 350 阅读 · 0 评论 -
Netty剖析之零拷贝
什么是零拷贝?零拷贝是网络编程的关键,很多性能优化都离不开;零拷贝,是从操作系统的角度来说的。因为内核缓冲区之间,没有数据是重复的(只有 kernel buffer 有一份数据);零拷贝不仅仅带来更少的数据复制,还能带来其他的性能优势,例如更少的上下文切换,更少的CPU缓存伪共享以及无CPU校验和计算;在Java程序中,常用的零拷贝有 mmap(内存映射)和sendFile。那么,他们在...原创 2020-02-01 20:27:45 · 237 阅读 · 0 评论 -
Netty剖析之NIO群聊系统
前言在前面我们详细讲解了BIO、NIO,本次我们将使用NIO来完成一个群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞);群聊系统基本要求:服务器端可监测客户端上线、离线、并转发客户端消息;客户端可群发消息给其它用户,也可接收其它客户发送的消息;代码示例服务端:public class GroupChatServer { private Selector sel...原创 2020-02-01 20:24:42 · 243 阅读 · 0 评论 -
Netty剖析之NIO
什么是NIO?NIO(non blocking IO),是JDK提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞IO;NIO相关类都被放在 java.nio包及子包下,并且对原java.io包中的很多类进行改写;NIO 有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器...原创 2020-01-31 23:04:04 · 173 阅读 · 0 评论 -
Netty剖析之NIO-Selector
什么是Selector?NIO之所以可以达到同步非阻塞的效果,使用一个线程就可以处理多个客户端的连接,Selector(选择器)功不可没;Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求,如下...原创 2020-01-31 23:02:07 · 350 阅读 · 0 评论 -
Netty剖析之NIO-Channel
什么是Channel?Channel即通道的意思,NIO的通道类似于流,但有如下区别:通道可以同时进行读写操作,而流同一时刻只能读或者写通道可以实现异步读写数据,而流只可同步操作通道可以从缓冲区读数据,也可以写数据到缓冲区BIO中的流是单向的,例如FileInputStream对象只能进行读取数据的操作,而NIO中的通道(Channel)是双向的,既可以读也可以写;Channel在...原创 2020-01-31 21:07:03 · 204 阅读 · 0 评论 -
Netty剖析之NIO-Buffer
什么是Buffer?Buffer即缓冲区的意思,缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象,该对象提供了一组方法,可以轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况;Buffer类及子类Buffer为缓冲区的父类,以下是常用子类:类名描述ByteBuffer存储字节数据CharBuffer存储字符数据...原创 2020-01-31 21:05:55 · 209 阅读 · 0 评论 -
Netty剖析之IO
什么是IO?所谓IO即input和output的缩写,是对数据流入和流出的抽象概念IO简单的理解就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能;Java总共支持三种网络编程IO模型:BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)BIO介绍BIO(blocking I/O),同步阻塞IO,服务器实现模式为一个线程处理一个连接,即每当有一个客户端连...原创 2020-01-30 17:11:40 · 198 阅读 · 0 评论 -
Netty剖析之BIO
什么是BIO?BIO(blocking I/O),同步阻塞IO,服务器实现模式为一个线程处理一个连接,即每当有一个客户端连接时,就会启动一个独立的线程来进行处理,如果这个连接不做任何事情,就会阻塞到那里,从而引起不必要的线程开销;BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解;BIO工作原理服务器...原创 2020-01-30 17:13:13 · 290 阅读 · 0 评论 -
Netty剖析之Netty介绍
什么是Netty?Netty是由Jboss提供的一个Java开源框架,现为GitHub上的独立项目;Netty是一个异步的、基于事件驱动的网路应用框架,用以快速开发高性能、高可靠性的网路IO程序;Netty主要针对TCP/IP协议下,面向client端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用;Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场...原创 2020-01-30 17:07:10 · 127 阅读 · 0 评论