Netty
文章平均质量分 89
Netty核心技术及源码剖析
猿小许
小沙弥: Java不平,何以平天下! 热衷研究各种Java技术栈,共同学习。
展开
-
十五、使用Netty自己实现dubbo RPC框架
一、什么是RPC?1.1 RPC基本介绍RPC(Remote Procedure Call)— 远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样(如图)3) 常见的 RPC 框架有: 比较知名的如阿里的Dubbo、google的gRPC、Go语言的rpcx、Apache的thrift,Spring旗下的 Spring Cloud。1原创 2021-11-11 18:04:02 · 142 阅读 · 0 评论 -
十四、Netty核心源码之连接请求源码分析
一、Netty核心源码之连接请求源码分析在上篇的服务器启动源码分析中,原文链接我们得知:服务器端的 NioServerSocketChannel 实例将自己注册到了 bossGroup 上(讲得更细一些,是 bossGroup 中 EventLoop 的 Selector 上),监听客户端连接,如下图所示。接下来,我们需要去研究的是服务器和客户端的连接请求源码1.1、监听 accept 事件,接受连接 & 创建一个新的 NioSocketChannel之前说过,NioEventLoop原创 2021-11-11 11:46:57 · 951 阅读 · 0 评论 -
十三、Netty核心源码分析之启动过程剖析
画外音本文使用的是 4.1.20 版本的 netty 源码。netty 源码包的总体结构如下,在 io.netty.example 中,官方给我们提供了很多的实例供我们参考。有项目实战需求的读者在了解了 Netty 的工作原理和常用 API 之后,可以参考这个包中的案例构建自己的网络 IO 程序。因为这篇文章是对netty的源码进行分析,所以篇幅可能会较长,博主尽量 用通俗易懂的语言以及较易理解的分析图为大家呈现,如果能坚持到阅读到最后,就足以说明你已经很棒了 ✌️ ✌️ ✌️ !!!一、1.原创 2021-11-10 19:10:48 · 658 阅读 · 0 评论 -
十二、Netty编码解码机制与Google Protobuf的使用
一、编码和解码1.1 基本介绍编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码codec(编解码器) 的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据1.2 Netty本身的编码解码的机制和问题分析1、Netty自身提供了一些codec(编解码器)2、 Netty 提供的编码器 StringEncoder,对字符串数原创 2021-11-09 19:20:04 · 204 阅读 · 0 评论 -
十一、Netty 通过 WebSocket 编程实现服务器和客户端长连接
一、 什么是Websocket?1、websocket技术应用场景使用java技术快速学习一个简单的在线聊天室系统,该系统具备很强的扩展性,可以根据业务需要,制作在线客服系统、web版的微信、QQ即时通信系统等,使用较为流行的技术,采用积木式的编程思路。web领域的实时推送技术,也被称为Realtime技术,这种技术要达到的目的是绕过用户不需要刷新浏览器就可以获得实时更新。他有着广泛的应用前景,比如在线聊天室,在线客服系统、评论系统、WebIM等。2、websocket协议概述webSocket原创 2021-11-09 11:47:01 · 617 阅读 · 0 评论 -
十、Netty核心技术之Netty心跳机制
实例要求:编写一个 Netty 心跳检测机制案例, 当服务器超过 3 秒没有读时,就提示读空闲当服务器超过 5 秒没有写操作时,就提示写空闲实现当服务器超过 7 秒没有读或者写操作时,就提示读写空闲服务端代码实现Myserver类代码package com.netty.heartBeat;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.Nio原创 2021-11-08 18:31:40 · 3057 阅读 · 0 评论 -
九、Netty核心技术之模块分析
BootStrap、ServerBootstrap介绍BootStrap意思是引导,一个Netty应用通常由一个BootStrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中BootStrap类是客户端程序的启动引导类,ServerBootStrap是服务端启动引导类常见的方法有public ServerBootStap group(EventLoopGroup parentGroup,EventLoopGroup childGroup),该方法用于服务器端,用来设置两个E原创 2021-11-08 17:15:20 · 440 阅读 · 0 评论 -
八、Netty核心技术之HTTP服务实例
一、实例要求:步骤:Netty服务器在8081端口监听,浏览器发出请求“http://localhost:8081/"服务器可以回复消息给浏览器客户端”hello 我是服务器“,并对特定请求资源进行过滤目的:Netty可以做Http服务开发,并且理解Handler实例和客户端及其请求的关系1.1 代码实现1.1.1 NettyServer代码package com.netty.NettyHttp;import io.netty.bootstrap.ServerBootstrap;im原创 2021-11-04 16:25:57 · 1276 阅读 · 0 评论 -
七、Netty核心技术之异步模型分析
一、异步模型1.1、基本介绍异步的概念和同步相对,当一个异步过程调用发出后,调用者不能立刻得到。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。Netty中的IO操作是异步的,包括Bind,Write、Connect等操作会简单的返回一个ChannelFuture。调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以方便的主动获得或者通过通知机制获得IO操作结果Netty的异步模型是建立在future和callback的之上的。callback就是回调原创 2021-11-04 14:09:30 · 255 阅读 · 0 评论 -
六、Netty核心技术之TaskQueue自定义任务
一、Netty模型Netty主要基于主从Reactor多线程模型(如图)做了一定的改进,其中主从Reactor多线程模型有多个Reactor上图解析????1、Netty抽象出两组线程池BossGroup专门负责接收客户端的连接,WorkGroup专门负责网络的读写2、BossGroup和WorkGroup类型都是NioEventLoopGroup3、NioEventLoopGroup相当于一个事件循环组,这个组合含有多个事件循环,每一个事件循环是NioEventLoop4、NioEvent原创 2021-11-04 10:11:57 · 545 阅读 · 0 评论 -
五、Netty核心技术之线程模型讲解
一、线程模型基本介绍 不同的线程模式,对程序的性能有很大的影响,为了搞清Netty线程模式,我们来系统的讲解下各个线程模式,最后看看Netty线程模型有什么优越性。 目前存在的线程模型有:传统阻塞IO服务模型Reactor模式 根据Reator的数量和处理资源线程池线程的数量不同,有三种典型的实现单Reactor 单线原创 2021-11-02 20:30:50 · 716 阅读 · 0 评论 -
四、Netty核心技术之NIO与零拷贝
一、零拷贝1.1 零拷贝基本介绍零拷贝是网络编程的关键,很多性能优化都离不开在Java程序中,常用的零拷贝有mmap(内存映射)和sendFile。那么,他们在OS里,到底是怎么样的一个设计?我们分析mmap和sendFile这两个零拷贝另外我们看下NIO中如何使用零拷贝1.2 传统IO数据读写与零拷贝对比1.2.1 Java传统IO File file = new File("test.txt"); try { RandomAccessFile r转载 2021-11-02 11:23:30 · 302 阅读 · 0 评论 -
三、NIO网络编程应用实例—实现群聊系统
一、实例准备1.1 实例要求编写一个NIO群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端;可以监测用户上线,离线,并实现消息转发功能客户端:通过channel可以无阻塞发送消息给其他所有用户,同时可以接收其他用户发送的消息(有服务器转发得到)目的:进一步理解NIO非阻塞网络编程机制1.2 结构图二、 实现服务端代码package com.GroupChat;import java.io.IOException;import java.net.I原创 2021-11-01 17:19:17 · 247 阅读 · 0 评论 -
二、 剖析Netty的工作机制之Buffer、Channel、Selector分析
一、缓冲区1.1 基本介绍缓冲区(buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel提供从文件、网络读取数据的渠道,但是读写或写入的数据都必须经过Buffer1.2 Buffer类及其子类分析Buffer类定义了所有的缓冲区都具有的四个属性来提供关于其包含的数据元素的信息:对于java中的基本数据类型(Boolean除外),都有原创 2021-10-29 14:26:37 · 324 阅读 · 0 评论 -
一、Netty的特性介绍及解决的问题
一、Netty的介绍Netty是由JBoss提供的一个Java开源框架,现为Github上的独立项目。Netty是一个异步的、基于时间驱动的网络应用层框架,用以快速开发高性能、高可靠性的网络IO程序。Netty主要针对在TCP 协议下,面向Clients端的高并发应用,或者Peeer-to-peer场景下的大量数据持续传输的应用Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景要透彻理解Netty,需要先学习NIO,这样我们才能阅读Netty的源码二、Netty的应用场景原创 2021-10-28 16:42:30 · 990 阅读 · 4 评论