![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Netty
文章平均质量分 84
Java硬件工程师
中国科学技术大学毕业,原支付宝Java开发工程师,立志做一名资深全栈工程师
展开
-
Netty 编解码器和 Handler 调用机制
基本说明1.Netty 的组件设计:Netty 的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等2.ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现 ChannelInboundHandler 接口(或 ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送响应时,也可以从 ChannelInboundHa原创 2021-05-31 23:07:05 · 333 阅读 · 2 评论 -
TCP 粘包和拆包及解决方案
TCP 粘包和拆包基本介绍1.TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle 算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的2.由于 TCP 无消息保护边界,需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题,看一张图3.TC原创 2021-05-31 23:07:25 · 359 阅读 · 0 评论 -
Google Protobuf
编码和解码的基本介绍1.编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码[示意图]2.codec(编解码器)的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析1.Netty 自身提供了一些 codec(编解码器)2.Netty 提供的编码器1.StringEncoder:对字符原创 2021-05-28 18:02:20 · 145 阅读 · 0 评论 -
Netty应用实例
群聊系统实例要求1.编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)2.实现多人群聊3.服务器端:可以监测用户上线,离线,并实现消息转发功能4.客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)5.目的:进一步理解 Netty 非阻塞网络编程机制GroupChatServerimport io.netty.bootstrap.ServerBootstrap;import io.netty.ch原创 2021-05-27 14:28:57 · 943 阅读 · 2 评论 -
Netty核心模块组件
Bootstrap、ServerBootstrap1.Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。2.常见的方法有public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup),该方法用原创 2021-05-26 16:29:59 · 117 阅读 · 1 评论 -
Netty 高性能架构设计
Netty 概述原生 NIO 存在的问题1.NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2.需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。3.开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。4.J原创 2021-05-25 20:55:05 · 401 阅读 · 4 评论 -
NIO与零拷贝和AIO
零拷贝基本介绍1.零拷贝是网络编程的关键,很多性能优化都离不开。2.在 Java 程序中,常用的零拷贝有 mmap(内存映射)和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?我们分析 mmap 和 sendFile 这两个零拷贝3.另外我们看下 NIO 中如何使用零拷贝传统 IO 数据读写Java 传统 IO 和网络编程的一段代码File file = new File("test.txt");RandomAccessFile raf = new RandomAcces原创 2021-05-23 12:27:25 · 300 阅读 · 2 评论 -
Java NIO群聊系统
实例要求:1.编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)2.实现多人群聊3.服务器端:可以监测用户上线,离线,并实现消息转发功能4.客户端:通过 Channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)5.目的:进一步理解 NIO 非阻塞网络编程机制6.示意图分析和代码// 服务端:package com.atguigu.nio.groupchat;import java.io.IOException;i原创 2021-05-22 21:58:29 · 172 阅读 · 0 评论 -
Java NIO 非阻塞网络编程快速入门
NIO 非阻塞网络编程快速入门案例:编写一个 NIO 入门案例,实现服务器端和客户端之间的数据简单通讯(非阻塞)目的:理解 NIO 非阻塞网络编程机制import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketCha原创 2021-05-22 19:49:34 · 144 阅读 · 0 评论 -
Java NIO编程基础
Java NIO 基本介绍1.Java NIO 全称 Java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 NewIO),是同步非阻塞的。2.NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。【基本案例】3.NIO 有三大核心部分:Channel(通道)、Buffer(缓冲区)、Selector(选择器) 。Channel类似socke原创 2021-05-22 16:22:43 · 238 阅读 · 1 评论 -
Java BIO编程
I/O 模型1.I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。(比如客户端和服务器端进行通信用的是单通道还是双通道,异步通信还是同步通信,是阻塞的还是非阻塞的,有没有用到缓冲)2.Java 共支持 3 种网络编程模型 I/O 模式:BIO、NIO、AIO。3.Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。【简单示意图原创 2021-05-20 19:52:00 · 139 阅读 · 2 评论 -
Netty简介
Netty 的介绍1.Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。2.Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。(异步:相对于同步而言,比如在传统同步模型中,浏览器向服务器发出一个请求,只有收到服务器的响应才能继续做其它的工作,对于异步而言,它不一定要等到响应回来。比如浏览器使用的ajax技术,发出了ajax请求之后,由于在ajax里面有一个回调函数,因此它可以在收到响应之前可以做其它的事情原创 2021-05-20 14:44:05 · 249 阅读 · 3 评论