![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty
jym12138
积极向上的小码农
展开
-
使用Netty实现Dubbo RPC
RPC基本介绍1.远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程2.两个或者多个应用程序都分布在不同的服务器上,他们之前的调用都像是本地方法调用一样3.在RPC中,Client叫服务消费者,Server叫服务提供者4.常用的PRC 框架:比较知名的 Dubbo,gRPC,Spring Cloud基于ne...原创 2020-02-15 15:01:45 · 8744 阅读 · 0 评论 -
Tcp 粘包拆包与解决方法
Tcp的粘包拆包1.TCP是面向连接的,面向流的,提供高可靠性服务,收发两端,都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合成一个大的数据块,然后进行封包,这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的2.由于TCP无消息保护边界,需要在接...原创 2020-02-12 21:57:34 · 8807 阅读 · 2 评论 -
Netty的入站出站与自定义编解码器
入站出站ChannelPipeline 提供了ChannelHandler链的容器,以客户端应用程序为例,如果事件的运动方向是从客户端到服务端,称之为出站,即客户端发送给服务端的数据会通过pipeline中的一系列ChannelOutboundHandler,并被这些handler处理,反之则成为入站编码解码器1.当netty发送或者接受一个消息的时候,就将会发生一次数据转换,入站消息会被解...原创 2020-02-12 12:18:57 · 8545 阅读 · 1 评论 -
Netty编码解码介绍以及Protobuf的简单使用
编码与解码:1.编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据就需要编码,接受数据就需要解码。2. codec(编解码器)的组成部分有两个:decoder(解码器)和encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder负责把字节码数据转换成业务数据。netty自带的编解码器netty提供的编码器:stringEncoder:对...原创 2020-02-12 10:30:22 · 8163 阅读 · 0 评论 -
Netty通过WebSocket实现服务器与客户端长连接
WebSocket长连接是基于处理器 HttpObjectAggregator与WebSocketServerProtocolHandler的HttpObjectAggregator1.http数据在传输过程中是分段,HttpObjectAggregator就是可以将多个段聚合。2.这就是为什么当浏览器发送大量数据时,就会发出多次http请求。WebSocketServerProtocol...原创 2020-02-11 10:35:38 · 9158 阅读 · 3 评论 -
netty心跳检测机制
Netty存在心跳检测机制,当客户端的连接超过一定时间没有读,或者写的时候,服务端可以检测出来并提示IdleStateHandler 是netty处理空闲状态的处理器具体实现步骤为:1.readerIdleTime : 表示多长时间没有读,就会发送一个心跳检测包检测是否连接2.writerIdleTime : 表示多长时间没有写,就会发送一个心跳检测包检测是否连接3.allIdleTim...原创 2020-02-11 10:19:24 · 8036 阅读 · 0 评论 -
Netty实现一个简单的群聊系统
服务端:package com.jym.groupchat;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;impo...原创 2020-02-10 10:55:21 · 8287 阅读 · 0 评论 -
Netty 常用Api简单梳理
Bootstrap,ServerBootStrap1.引导一个Netty应用通常由一个BootStrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中BootStrap类是客户端程序的启动引导类,ServerBootStrap是服务端启动的引导类.2.常见的方法有:ServerBootstrap group(EventLoopGroup parentGroup, Eve...原创 2020-02-10 10:25:04 · 10106 阅读 · 0 评论 -
Netty实现一个简单的http服务器
由于客户端是浏览器,所以只需要编写服务端服务端:绑定10086端口package com.jym.http;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelFutureListener;import io.net...原创 2020-02-08 21:59:54 · 9297 阅读 · 0 评论 -
Netty的异步模型
上篇文章说了使用Task实现异步处理耗时的任务,这篇说说具体的异步模型基本介绍:1.异步的概念和同步相对,当一个异步过程调用出发后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态,通知和回调来通知调用者2.Netty中的IO操作是异步的,包括Bind,Write,Connect等操作会简单的返回一个ChannelFuture3.调用者并不能立刻获得结果,而是通过Futur...原创 2020-02-08 21:51:33 · 8142 阅读 · 0 评论 -
Netty任务队列中的Task有三种典型使用场景
每个NioEventLoop里都有一个selector与TaskQueue,当我们在进行一些耗时的操作的时候,会产生阻塞,这时候我们就可以用到TaskQueue具体实现有三种:1.用户程序自定义的普通任务:在自定义的handler的channelRead方法中: // 比如这里我们有一个非常耗时的业务,异步执行,提交该channel 对应的NioEventLoop的TaskQu...原创 2020-02-08 21:43:55 · 9939 阅读 · 0 评论 -
Netty简单的入门实例以及通过debug的一些总结
每行代码都有注释,请仔细观看:客户端:package com.jym.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketC...原创 2020-02-08 21:31:59 · 8517 阅读 · 0 评论 -
Netty模型简单说明
由于netty模型图比较复杂,所以由简到深工作原理示意图(简单版)流程图:Netty主要基于主从Reactor多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor其流程为:1.BossGroup线程维护Selector,只关注Accecpt2.当接受到Accecpt事件,获取到对应的SocketChannel,封装成NIOSocketChannel并注册Wo...原创 2020-02-07 21:12:49 · 8647 阅读 · 0 评论 -
Reactor模式-----单Reactor多线程与主从Reactor多线程
单Reactor多线程:针对单Reactor多线程模型中,Reactor在单线程中运行。高并发场景下容易成为性能瓶颈,可以让Reactor在多线程中运行线程模型:方法说明:1.Reactor 对象通过select监控客户端请求事件,收到事件后,通过dispatch进行分发2.如果是连接请求,则右Acceptor通过accept处理连接请求,然后创建一个Handler对象处理完成连接后的...原创 2020-02-06 21:13:35 · 11693 阅读 · 2 评论 -
Reactor模式-----单Reactor单线程
Reactor模式:1.Reactor模式,通过一个或多个输入同时传递给服务处理器(基于事件驱动)2.服务器端程序处理传入的多个请求,并将它们同步分派到相应的处理线程,因此Reactor模式也叫Dispatcher模式3.Reactor模式使用IO复用监听事件,收到事件后,分发给某个线程(进程),这点就是网络服务器高并发处理关键Reactor模式中核心组成:1.Reactor:Reac...原创 2020-02-06 21:07:50 · 9721 阅读 · 0 评论 -
Netty基本概念与传统IO线程模型
Netty1.Netty是由JBOSS提供的 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端2.Netty可以帮助你快速,简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程3.Netty是目前最流向的NIO框架,Netty在互联网领域,大数据分布式计算机领域,游戏行业,通信行业等过得了广泛的应用,Dubbo框架内部都采用了Netty为什么要使用...原创 2020-02-06 21:01:37 · 8867 阅读 · 0 评论 -
NIO练习----群聊系统
NIO的三个核心组件为Selector,Channel,Buffer,下面基于NIO来完成一个群聊系统服务端:package com.jym.nio.groupChat;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.chan...原创 2020-02-03 10:32:26 · 9923 阅读 · 0 评论 -
NIO三个核心组件 ---- selector(选择器,也叫多路复用选择器)
selector的作用:1.Java NIO 用非阻塞的IO方式,可以用一个线程,处理多个客户端连接,就会用到selector2.Selector能够检测多个注册的通道上是否有事件发生,如果有时间发生,便获取时间然后针对每个时间进行对应的处理,这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求3.只有在连接真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每...原创 2020-02-02 17:20:08 · 9551 阅读 · 0 评论 -
基于MappedByteBuffer来修改文件的内容
MappedByteBufferMappedByteBuffer可让文件直接在内存(堆外内存)中修改,操作系统不需要拷贝,而如何同步到文件由NIO来完成.使用MappedByteBuffer来修改文件的内容:package com.jym.nio;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;impo...原创 2020-02-01 22:06:47 · 10138 阅读 · 1 评论 -
NIO三个核心组件 ---- Channel(管道)
Channel(管道):1.类似于流,但是区别如下:通道可以同时进行读写,流只能读或者写通道可以实现异步读写数据通道可以从缓冲区(buffer)读取数据,也可以写数据到缓冲区(buffer)2.BIO中的stream是单向的,Channel是双向的,可以读操作,也可以写操作3 Channel在NIO中是一个接口常用的Channel类有: FileChannel,DatagramCha...原创 2020-02-01 21:52:58 · 10047 阅读 · 0 评论 -
NIO三个核心组件 ---- Buffer(缓冲区)
Buffer:缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变换情况,Channel提供从文件,网络读取数据的渠道,但是读取或者写入的数据都必须经由BufferBuffer类以及子类1.Buffer是一个顶级父类,它是一个抽象类,有七个子类,除了boolean类型的...原创 2020-02-01 21:30:36 · 9663 阅读 · 0 评论 -
NIO的流程以及与BIO的差别
NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求就进行处理。连接数目多,且连接比较短,用于聊天室,弹幕系统NIO是JDK1.4 JAVA提供了一系列改进的输入/输出的新特性,被统称为NIO,同步非阻塞IO,相关的类都在java.nio包内NIO的特性:NIO有三个核心部分:Channel(管道),Bu...原创 2020-02-01 21:16:27 · 9698 阅读 · 0 评论 -
BIO的流程以及问题
BIO:原生的Java IO 模型为同步并阻塞型,传统的java io编程,其相关的类都在java.io里同步并阻塞;服务器实现模式为一个个连接一个线程,即客户端有连接请求时,服务端就需要启动一个线程来进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当连接或者并发量增大的时候,它是有瓶颈的.可以通过线程池机制改善(实现多个客户连接服务器).作用场景:程序简单 易理解,连接数少且...原创 2020-01-31 17:46:01 · 11056 阅读 · 0 评论