Netty
文章平均质量分 95
Netty
猎户星座。
花有重开日,人无再少年。
展开
-
Netty三大核心组件之ByteBuf
ByteBuf结构首先,我们先来了解一下 ByteBuf 的结构以上就是一个 ByteBuf 的结构图,从上面这幅图可以看到ByteBuf 是一个字节容器,容器里面的的数据分为三个部分,第一个部分是已经丢弃的字节,这部分数据是无效的;第二部分是可读字节,这部分数据是 ByteBuf 的主体数据, 从 ByteBuf 里面读取的数据都来自这一部分;最后一部分的数据是...转载 2019-12-01 21:14:01 · 303 阅读 · 0 评论 -
Reactor模型与实现
在网络IOReactor模型和Proactor模型。Reactor基于同步IO模式,Proactor基于异步IO模式。Netty网络框架,Redis等中间件中都有使用到Reactor模型。本文将对Reactor模型的如下三种分类进行学习和实现。单Reactor单线程模型;单Reactor多线程模型;主从Reactor多线程模型。如果不具备网络IO的相关知识,建议先阅读Java网络IO模型分析与实现。Reactor模型主要就是监听事件分发事件和处理事件。其中Reactor角色会负责监听事件和。转载 2024-01-29 11:18:52 · 92 阅读 · 0 评论 -
零拷贝简介
传统IO在开始谈零拷贝之前,首先要对传统的IO方式有一个概念。基于传统的IO方式,底层实际上通过调用read和write来实现。通过read把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区;然后再通过write写入到socket缓冲区,最后写入网卡设备。整个过程发生了4次用户态和内核态的上下文切换和4次拷贝,具体流程如下:用户进程通过read方法向操作系统发起调用,此时上下文从用户态转向内核态DMA控制器把数据从硬盘中拷贝到读缓冲区CPU把读缓冲区数据拷贝到应用缓冲区,上下文转载 2021-04-03 20:14:52 · 210 阅读 · 0 评论 -
Linux之IO模型/IO复用模型
select、poll、epoll都是I/O多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个文件描述符,一旦某个描述符就绪(读就绪或写就绪),能够通知程序进行相应的读写操作 。但是,select,poll,epoll本质还是同步I/O(I/O多路复用本身就是同步IO)的范畴,因为它们都需要在读写事件就绪后线程自己进行读写,读写的过程阻塞的。而异步I/O的实现是系统会把负责把数据从内核空间拷贝到用户空间,无需线程自己再进行阻塞的读写,内核已经准备完成。一、Select机制API转载 2021-01-23 22:40:14 · 268 阅读 · 0 评论 -
RPC简介
在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:1)要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端,怎么调用?2)其它团队要使用我们的新服务,我们的服务该怎么发布以便他人调用?下文将对这两个问题展开探讨。1 public转载 2020-06-09 21:37:36 · 300 阅读 · 0 评论 -
Netty之RPC
前言在微服务大行其道的今天,分布式系统越来越重要,实现服务化首先就要考虑服务之间的通信问题。这里面涉及序列化、反序列化、寻址、连接等等问题。。不过,有了RPC框架,我们就无需苦恼。一、什么是RPCRPC(Remote Procedure Call)— 远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。...转载 2019-12-08 20:31:05 · 177 阅读 · 0 评论 -
Netty之WebSocket
WebSocket 简介WebSocket 协议最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。WebSocket的通信建立——握手过程WebSocket的握手使用HTTP来实现,客户端发送带有Upgrade头的HTTP Request消息。服务端根据请求,做Response。请求报文:GET w...原创 2019-12-08 17:26:55 · 1334 阅读 · 0 评论 -
Netty之心跳检测
何为心跳所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.注:心跳包还有另一个作用,经常被忽略,即:一个连接如果长时间不用,防火墙或者路由器就会断开该连接。如何实现核心Handler —— IdleStateHandler在 Netty 中, 实现心跳机制的关键是 IdleStateHa...原创 2019-12-07 13:06:28 · 335 阅读 · 0 评论 -
Netty之粘包/拆包
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。这里说明一下,由于oschina将“jie m...转载 2019-12-06 21:39:45 · 159 阅读 · 0 评论 -
Netty三大核心组件之Selector
之前进行socket编程时,accept方法会一直阻塞,直到有客户端请求的到来,并返回socket进行相应的处理。整个过程是流水线的,处理完一个请求,才能去获取并处理后面的请求,当然也可以把获取socket和处理socket的过程分开,一个线程负责accept,一个线程池负责处理请求。但NIO提供了更好的解决方案,采用选择器(Selector)返回已经准备好的socket,并按顺序处理,基于通...原创 2019-12-01 21:38:02 · 1035 阅读 · 0 评论 -
Netty三大核心组件之Channel
所有的 NIO 操作始于通道,通道是数据来源或数据写入的目的地,主要地,我们将关心 java.nio 包中实现的以下几个 Channel:FileChannel:文件通道,用于文件的读和写。DatagramChannel:用于UDP连接的接收和发送SocketChannel:TCP客户端ServerSocketChannel:TCP服务端,监听某个端口进来的请求。Chann...原创 2019-12-01 21:29:05 · 498 阅读 · 0 评论 -
Netty之EventLoop
EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般会有多个 EventLoop 同时工作,每个 EventLoop 维护着一个 Selector 实例。 EventLoopGroup 提供 next 接口,可以从组里面按照一定规则获取其中一个 EventLoop来处理任务。在 Netty 服务器端编程中,我们一般都需要提供两个 E...原创 2019-12-01 21:13:34 · 250 阅读 · 0 评论 -
Netty之线程模型
线程模型基本介绍目前存在的线程模型有:传统阻塞I/O服务模型 Reactor模型传统阻塞I/O服务模型每个请求都需要独立的线程完成数据read,业务处理,数据write的完整操作问题当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大 连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在read操作上,造成线程资源浪费Reactor模式I/O 复用结合...原创 2019-12-01 21:14:10 · 248 阅读 · 0 评论 -
Netty之服务端/客户端
项目总体结构,分为两个项目,服务端和客户端我们先来看下服务端这个项目:MyServerpackage com.yj.server.service;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Value;import org.springf...原创 2019-12-01 21:14:26 · 194 阅读 · 0 评论 -
Netty之pipeline
pipeline 与 channelHandler 的构成无论是从服务端来看,还是客户端来看,在 Netty 整个框架里面,一条连接对应着一个 Channel,这条 Channel 所有的处理逻辑都在一个叫做 ChannelPipeline 的对象里面,ChannelPipeline 是一个双向链表结构,他和 Channel 之间是一对一的关系。ChannelPipeline 里面每个...转载 2019-12-01 21:13:52 · 552 阅读 · 0 评论