
Netty
feiku_ysu
这个作者很懒,什么都没留下…
展开
-
Netty学习笔记_15(TCP粘包和拆包)
1、TCP粘包与拆包TCP面向连接,面向流,提供高可靠性服务。在消息收发过程中,需要在发送端和接收端建立成对的Socket,发送端不会一有数据就进行发送,而是将多次间隔较小的,数据量较小的数据合并成一定长度的数据包整体发送。这样可以提高效率,但会给接收方分辨单个数据消息增加难度,因为面向流的通信是没有消息保护边界的。 TCP粘包与拆包,是指发送端在发送多个数据消息时出现的不同情形。由于数据在发送前需要先转换为二进制字节码,当多个数据消息的字节码被合并成一个数据包发送时,称为粘包;当某个数据消息的字节码原创 2020-08-17 15:37:51 · 223 阅读 · 0 评论 -
Netty学习笔记_14(Netty编解码器和handler调用机制)
1、Netty的主要组件有:Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipeline等。ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器。例如:实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),可以接收入站事件和数据,这些数据将被业务逻辑处理;当给客户端回送响应时,也可以通过ChannelInboundHandler冲刷数据。业务逻辑通常写在一个或多原创 2020-08-14 16:34:42 · 836 阅读 · 0 评论 -
Netty学习笔记_13(ProtoBuf在Netty中的简单应用)
1、Netty编解码器数据在网络中是以二进制字节码的形式流动,而我们在端接收或发送的数据形式则各种各样(文本、图片、音视频等),因此需要在发送端对数据进行编码,在接收端对收到的数据解码; codeC(编解码器)的组成部分——Encoder(编码器)负责将业务数据转换为二进制字节码;Decoder(解码器)负责将二进制字节码转换为业务数据; Netty编码机制——StringEncoder / StringDecoder负责字符串数据对象的编解码;ObjectEncoder / Objec.原创 2020-08-09 17:49:50 · 360 阅读 · 0 评论 -
Netty学习笔记_12(WebSocket与长连接)
Http短连接和长连接Http短连接即TCP短连接,即客户端和服务器通过“三次握手”建立连接后,进行一次Http操作以后,便断开连接。因此,浏览器每打开一个web资源,便创建了一个新的http会话; Http长连接即TCP长连接,即客户端和服务器建立连接后保持一定的时间,即使用户在进行某次操作后将浏览器(或客户端)关闭,但只要在保持时间内又一次访问该服务器,则默认使用已经创建好的连接; Http1.0默认支持短连接,Http1.1默认支持长连接。Http连接无状态Http协议无状态是指协议对于原创 2020-08-07 20:02:44 · 760 阅读 · 0 评论 -
Netty学习笔记_11(Netty群聊系统)
一、Netty群聊系统开发要求编写一个Netty群聊系统,实现服务器端和客户端之间的数据简单通信(非阻塞) 实现多人群聊 服务器端:检测用户上线、离线、转发客户端消息 客户端:通过channel可以无阻塞发送消息给其他客户,同时可以接收其他客户端发送的消息(服务器转发得到)二、设计与开发2-1、服务器端首先要设置监听端口,服务器将通过该端口与客户端交换信息,发送和接收数据; 初始化事件循环组EventLoopGroup,这里初始化两个事件循环组bossGroup和workerGroup原创 2020-08-05 00:09:05 · 394 阅读 · 0 评论 -
Netty学习笔记_10(Netty核心模块组件)
1、BootStrap,ServerBootStrap一个Netty应用通常由一个BootStrap开始,主要作用是配置整个Netty程序,串联各个组件,Netty中的BootStrap类是客户端程序的启动引导类,ServerBootStrap是服务端启动引导类 常见方法: public ServerBootstrapgroup (EventLoopGroup parentGroup, EventLoopGroup childGroup) 作用于服..原创 2020-07-28 22:13:01 · 393 阅读 · 0 评论 -
Netty学习笔记_9(Netty概述)
一、原生NIO存在的问题NIO的类库与API繁杂,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、Bytebuffer等 要求熟悉Java多线程编程和网络编程 开发工作量和难度大,例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等 JDK NIO的BUG:例如Epoll Bug,它会导致Selector空轮询,最终导致CPU占用100%,到JDK1.7还未被有效解决二、Netty说明Netty是由JBOS.原创 2020-07-25 10:48:37 · 204 阅读 · 0 评论 -
Netty学习笔记_8(NIO与零拷贝)
1、零拷贝基本介绍传统IO是基于数据拷贝操作的,即让数据在操作系统内核地址空间的缓冲区和用户程序地址空间定义的缓冲区进行传输【PS:减少了磁盘IO,但增加了CPU开销( CPU会进行多次冗余拷贝,且在数据拷贝过程中有极大的系统资源浪费 )】 零拷贝是一种避免CPU将数据从一个存储块拷贝到另一块存储的技术【避免数据拷贝+多种操作结合】(所谓“零拷贝”,是没有CPU拷贝)1.2、传统IO(本地文件数据上传)【4次拷贝,3次切换】应用程序调用read()方法,先将数据从磁盘读取到OS内核缓冲区,采用D原创 2020-07-21 16:57:37 · 285 阅读 · 0 评论 -
Netty学习笔记_7(Selector的基本使用及NIO小案例)
1、Selector(选择器)1.1、基本介绍Java的NIO使用了非阻塞的io方式->一个线程处理若干个客户端连接,使用到了selector(选择器)。 Selector能够检测到多个注册通道上是否有事件发生(多个Channel以事件的形式注册到同一个selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。 只有在连接/通道真正有读写事件发生时,才会进行读写,减少了系统开销,并且不必为每个连接都创建一个线程,不用去维护多个线程。 避免了多线程之间上下文切换导致的开原创 2020-07-09 10:39:44 · 557 阅读 · 0 评论 -
Netty学习笔记_6(Channel的基本使用)
1、基本介绍1、NIO通道类似于Java的输入输出流,有所区别: 通道可以同时进行读写,流只能读或写; 通道可以实现异步读写数据; 通道可以从缓冲区读数据,也可以写数据到缓冲区。2、BIO中stream是单向的,例如FileInputStream对象只能进行读取数据的操作,而NIO的 通道(Channel)是双向的可以读操作,也可以写操作。3、Channnel在NIO中是一个接口:public interface Channel extends Clos...原创 2020-06-23 10:21:31 · 19315 阅读 · 0 评论 -
Netty学习笔记_5 (Buffer的基本使用)
基本介绍:本质——可以读写数据的内存块【一个容器对象(含数组)】;一组方法——可以轻松使用内存块;一些机制——跟踪或记录缓冲区的状态变化情况。Buffer类及其子类:NIO中Buffer是一个顶级父类,抽象类常用的Buffer子类:1)ByteBuffer——存储字节数据到缓冲区ShortBuffer——存储字符串数据到缓冲区 CharBuffer——存储字符数据到缓冲区 IntBuffer——存储整型数据到缓冲区 LongBuffer——存储长整型数据到缓冲区...原创 2020-06-18 00:03:36 · 465 阅读 · 0 评论 -
Netty学习笔记_4(NIO的基本介绍和与BIO的比较)
Java NIO(non-blocking IO):从jdk1.4开始,Java提供的一系列改进输入输出的新特性;同步非阻塞。NIO相关的类都被放在java.nio包及其子包下【java.io包内容改写】 Java NIO三大核心组件:Channel(管道)、Buffer(缓冲区)、Selector(选择器)》》提供了面向缓冲区(面向块)的编程 Java NIO的非阻塞模式:一个线程可以从某通道发送请求/读取数据——》得到目前可用的数据(无数据可用则什么都不获取)——》不会保持线程阻塞,线程可以做其原创 2020-06-14 23:27:12 · 215 阅读 · 0 评论 -
Netty学习笔记_3(BIO基本介绍和简单使用)
Java BIO,即blocking IO,是传统的Java IO编程,在JDK1.版本之前,只有这一种IO编程,BIO 相关的类和接口被封装在java.io包及其子包中。BIO——同步阻塞型IO,每有一个客户端想要连接服务器时(即发出请求),服务器就启动一个线程专门处理该请求。一个连接对应一个线程,则有多少客户端连接服务器,就会产生多少线程。当有海量客户发出请求时,必然给服务器巨大的压力;除此之外,客户端对于服务器的访问并不是永久持续的,服务器在启动一个线程管理某客户端的请求后,客户端如果不再发...原创 2020-06-13 16:49:31 · 235 阅读 · 0 评论 -
Netty学习笔记_2(IO模型)
IO模型:即使用什么样的通道进行数据的发送和接收,很大程度决定了程序通信的性能Java BIO:传统阻塞IO(原生的Java IO)—>同步并阻塞;服务器(一个连接——一个线程)即每当客户端有连接请求时,服务器启动一个线程进行处理》》当此连接不做任何事情时会造成不必要的线程开销【大量客户端会开启大量线程,服务器压力大;客户端线程不会一直传输数据,不必要开销;服务器未读取到输入数据时,会阻塞在read/write方法处】BIO模式:Java NIO:同步非阻塞;服务器实现一个线程处.原创 2020-06-11 16:47:05 · 154 阅读 · 0 评论 -
Netty学习笔记_1(基本介绍)
Netty学习笔记_1(基本介绍)Netty是异步的,基于事件驱动的网络应用框架。异步:区别于过去的BS模型,当浏览器向服务器发送某请求以后,可以不等待服务器对该请求做出响应,而是设置一回调函数专门处理此服务器响应。浏览器可以在此期间发出其他事件请求。基于事件驱动:例如在网页上点击某按钮,即产生一事件,随后程序会按照此事件发出请求,服务器相应地做出回馈,最后将结果呈现给用户。实际使用时,网页连接、网页断开、表单提交等都可以看做是一个事件。而这一个一个的事件,是Netty框架功能运行的触发者。Nett原创 2020-06-07 15:45:12 · 214 阅读 · 0 评论