
Netty系列
介绍NIO,AIO及netty相关的内容
波波烤鸭
10余年架构和线上讲师工作经验。精通Java,微服务和云原生相关,致力于Java技术的免费分享。
展开
-
Netty编解码之ProtoBuf案例二
前面我们介绍了Protobuf的基本使用,但是我们是一个POJO对象创建一个proto文件,那么在实际环境中将要创建多个文件,会非常的不方便,本文我们来看看怎么根据类型来动态处理Protobuf案例二proto文件 在proto文件中我们通过message来管理类型,具体如下syntax = "proto3";option optimize_for = SPEED; // 加快解析...原创 2020-01-01 20:42:02 · 1615 阅读 · 0 评论 -
Netty编解码方案之Protobuf介绍
本文我们来给大家介绍下Netty中对传输数据编解码的解决方案ProtoBufProtobuf介绍1. Netty本身的编码解码的机制和问题分析Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器StringEncoder,对字符串数据进行编码ObjectEncoder,对 Java 对象进行编码…Netty 提供的解码器StringDecoder, 对字...原创 2019-12-31 18:08:40 · 2457 阅读 · 0 评论 -
Netty案例介绍(websocket服务)
本文我们来实现一个基于WebSocket协议的案例。WebSocket案例1.需求分析 Http协议是无状态的, 浏览器和服务器间的请求响应一次,下一次会重新创建连接.所有在有些情况下并不是太适用。这时websocket就是我们的一种实现方案,具体的websocket的内容网上很多,自行查阅哦,本文主要是介绍基于netty如何实现websocket通信。要求:实现基于webSoc...原创 2019-12-30 23:13:04 · 2500 阅读 · 0 评论 -
Netty案例介绍-群聊案例实现
前面介绍了基于Netty的Http服务,本文我们来通过Netty来实现群聊案例。群聊案例1.案例需求编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)目的:进一步理解Nett...原创 2019-12-29 15:29:57 · 2804 阅读 · 1 评论 -
Netty入门实例-Http服务
本文我们继续来实现Netty的第二个入门案例,一个Http服务。Http服务1.需求Netty 服务器在 6668 端口监听浏览器发出请求 "http://localhost:6668/ "服务器可以回复消息给客户端 "Hello! 我是服务器 5 " , 并对特定请求资源进行过滤.2.创建服务端handler 在handler中我们对浏览器提交的Http请求做出处理p...原创 2019-12-28 17:03:26 · 2991 阅读 · 0 评论 -
Netty第一个入门实例-TCP服务
本文我们来写第一个Netty的入门实例,一个TCP服务案例。Netty入门案例1. 案例需求创建Netty 服务器在 6668 端口监听创建Netty客户端,客户端能发送消息给服务器 “hello, 服务器~”服务器可以回复消息给客户端 “hello, 客户端~”目的:对Netty 线程模型 有一个初步认识, 便于理解Netty 模型理论2.创建maven项目 通过ecl...原创 2019-12-28 16:39:28 · 3164 阅读 · 2 评论 -
Netty高性能架构模型介绍
上一篇我们介绍了Reactor模式,本文我们就来具体分析下Netty中的架构模型到底是怎么样的。Netty模型介绍1.工作原理-简单介绍 Netty 主要基于主从 Reactors 多线程模型(如图)做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor.流程描述:BossGroup 线程维护Selector , 只关注Accecpt当接收到Accept事...原创 2019-12-28 16:27:41 · 3403 阅读 · 1 评论 -
Netty高性能架构之Reactor模式
在讨论Netty的架构模式之前,我们先来介绍下Reactor模式,因为Netty的架构模式是在此基础上演变而来的Reactor模式介绍1. 线程模型基本介绍 不同的线程模式,对程序的性能有很大影响,为了搞清Netty 线程模式,我们来系统的讲解下 各个线程模式, 最后看看Netty 线程模型有什么优越性. 目前存在的线程模型有:传统阻塞 I/O 服务模型 Reactor 模式...原创 2019-12-28 15:37:47 · 5948 阅读 · 0 评论 -
Netty简单概述
本文开始给大家介绍Netty相关的内容,本篇主要介绍的是Netty概念性相关的内容Netty概述1. 原生NIO存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 React...原创 2019-12-28 15:06:27 · 2434 阅读 · 0 评论 -
Netty之JavaNIO编程模型介绍02
因为篇幅问题我们继续上一篇的内容继续。一、NIO网络编程原理分析 NIO 非阻塞 网络编程相关的(Selector、SelectionKey、ServerScoketChannel和SocketChannel) 关系梳理图对上图的说明:当客户端连接时,会通过ServerSocketChannel 得到 SocketChannelSelector 进行监听 select ...原创 2019-12-28 14:45:33 · 1770 阅读 · 0 评论 -
Netty之JavaNIO编程模型介绍01
我们在前面的BIO的基础上我们来继续介绍下NIO的内容一、Java NIO 基本介绍 Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的 NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.i...原创 2019-12-28 11:53:47 · 1909 阅读 · 0 评论 -
Netty之JavaBIO编程模型介绍
最近打算再次整理下Netty的相关内容,但是要把Netty弄的比较清楚,我们首先需要对Java中的BIO,NIO及AIO要比较清楚,所以我们前面会花几篇文章先把这块的内容整理出来。JavaBIO编程模型介绍1.I/O模型介绍1.1 什么是I/O模型 简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。java共支持3种网络编程模型:BIONIO...原创 2019-12-28 10:52:20 · 1922 阅读 · 0 评论 -
Netty解决TCP粘包/拆包的问题
什么是TCP粘包/拆包 首先要明确, 粘包问题中的 “包”, 是指应用层的数据包.在TCP的协议头中, 没有如同UDP一样的 “报文长度” 字段,但是有一个序号字段. 站在传输层的角度, TCP是一个一个报文传过来的. 按照序号排好序放在缓冲区中. 站在应用层的角度, 看到的只是一串连续的字节数据.那么应用程序看到了这一连串的字节数据, 就不知道从哪个部分开始到哪个部分是一个完整的应用...原创 2019-04-12 10:43:43 · 3416 阅读 · 0 评论 -
Netty之入门案例
前面给大家介绍了NIO,我们会发现用NIO实现异步非阻塞的网络通信代码量非常大,而且并不是很好理解,在实际的开发中一般我们也都是会实现基于NIO的框架来操作的,比如Netty,这样开发效率有高而且Bug也少。Netty入门案例官网:https://netty.io/环境准备 你可以去官网下载对应的jar包依赖,然后创建普通的java项目即可,也可以跟着我通过创建maven项目来实现,...原创 2019-04-11 22:27:46 · 2582 阅读 · 1 评论 -
NIO之完成网络通信
NIO被叫为 no-blocking io,其实是在网络这个层次中理解的,对于FileChannel来说一样是阻塞。对于网络通信是还有如下几个Channel java.nio.channels.Channel 接口 |-- SelectableChannel |-- SocketChannel |-- ServerSocketChannel |-- DatagramChanne...原创 2019-04-11 16:22:03 · 1688 阅读 · 0 评论 -
IO模型介绍
前面介绍了NIO中的buffer和Channel,而我们将NIO主要的使用场景还是在网络环境中,在具体介绍之前我们需要了解下IO的模型IO模型序号类型1阻塞I/O2非阻塞I/O3I/O多路复用4信号驱动I/O5异步I/OI/O模型需要的基础文件描述符 Linux 的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作...原创 2019-04-11 14:37:22 · 1685 阅读 · 0 评论 -
NIO之通道Channel【FileChannel介绍】
通道(channel)介绍 Channel是一个对象,作用是用于源节点和目标节点的连接,在java NIO中负责缓冲区数据的传递。Channel本身不存储数据,因此需要配合缓冲区进行传输。主要的实现类有 主要的实现类有如下四个: FileChannel, SocketChannel, ServerSocketChannel, DatagramChannel,都实现了java.nio.c...原创 2019-04-11 12:01:08 · 2192 阅读 · 0 评论 -
NIO之缓冲区【直接和非直接缓冲区】
直接与非直接缓冲区 字节缓冲区跟其他缓冲区类型最明显的不同在于,它们可以成为通道所执行的 I/O 的源头和/或目标。其实发现通道只接收ByteBuffer作为参数这个将Channel的时候会发现。类型优点缺点直接缓冲区在虚拟机内存外,开辟的内存,IO操作直接进行,没有再次复制创建和销毁开销大非直接缓冲区在虚拟机内存中创建,易回收但占用虚拟机内存开销,处理中...原创 2019-04-10 23:23:23 · 1772 阅读 · 0 评论 -
NIO之缓冲区【复制缓冲区】
复制缓冲区 复制一个缓冲区会创建一个新的 Buffer 对象,但并不复制数据。原始缓冲区和副本都会操作同样的数据元素。我们将以 CharBuffer 为例来演示,但同样的操作可被用于任何基本的缓冲区类型。public abstract class CharBuffer extends Buffer implements CharSequence, Comparable { // Thi...原创 2019-04-10 22:21:54 · 1651 阅读 · 0 评论 -
NIO之缓冲区【基础内容】
我们知道NIO的三大核心是buffer,channel和selector,本文开始详细介绍下buffer缓冲区Buffer1.缓冲区介绍 一个Buffer对象是固定数量的数据的容器。其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。缓冲区可以写满和释放。对于每个非布尔原始数据类型都有一个缓冲区类。尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节。...原创 2019-04-10 12:30:58 · 2437 阅读 · 0 评论 -
NIO概述
NIO简介 NIO也叫(New IO)或者(no-blocking io),是jdk1.4后提供的,主要目的是为了提高速度,和我们前面介绍的’内核空间’和’用户空间’相关。是一个可以替代标准Java IO API的新IO API,提供了与标准IO不同的IO工作方式。NIO和IO的区别 通过“内核空间”“用户空间”“虚拟内存”等概念的介绍,大家可能会感觉普通IO的性能要差很多,因为要做两...原创 2019-04-10 10:15:16 · 1841 阅读 · 0 评论 -
Java文件读写原理和虚拟内存
后面打算系统性的介绍下NIO和Netty的内容,因为这块内容也是每个程序员必须要掌握的内容,而在介绍NIO之前我们需要先了解下一些前置的知识1.内核空间和用户空间 这两个概念对于初次接触的小伙伴来说并不是很好理解,举个简单例子如下图: 上图中的储户是没法直接从金库中存钱获取取钱的,如果这么做了,那么就非法了。这里用户空间相当于储户,内核空间相当于银行职员,而硬盘相当于金库,也就是用...原创 2019-04-10 08:50:57 · 2875 阅读 · 0 评论