随笔分类 - Netty
摘要:1. 通信框架功能设计 1.1 功能描述 通信框架承载了业务内部各模块之间的消息交互和服务调用,它的主要功能如下: 基于 Netty 的 NIO 通信框架,提供高性能的异步通信能力; 提供消息的编解码框架,可以实现 POJO 的序列化和反序列化; 消息内容的防篡改机制 提供基于 IP 地址的白名单接
阅读全文
摘要:在前面的章节中,我们已经详述了事件和异常传播在 Netty 中的实现,其中有一类事件我们在实际编码中用的最后,那就是 write 或者 writeAndFlush。 本章分以下几个部分阐述一个 Java 对象最后是如何转变成字节流,又写到 Socket 缓冲区的。 1. Pipeline 中的标准链
阅读全文
摘要:通过 [09] 的学习,我们已经知道,Netty 的 Reactor 线程就像是一个发动机,驱动着整个框架的运行,而服务端启动和新连接接入正是发送机的导火线,将发动机点燃。 在服务端端口绑定和新连接建立的过程中会建立相应的 Channel,而与 Channel 密切相关的是 Pipeline 这个概
阅读全文
摘要:1. 粘包与拆包 1.1 为什么要粘包 首先你得了解一下 TCP/IP 协议,在用户数据量非常小的情况下,比如 1 字节,该 TCP 数据包的有效载荷非常低,传递 100 个字节的数据,需要 100 次 TCP 传送、100 次 ACK,在应用及时性要求不高的情况下,将这 100 个有效数据拼接成一
阅读全文
摘要:本章,我们来分析每个新连接在接入过程中,Netty 底层的机制是如何实现的。先来简要回顾一下: 首先是 Netty 中的 Reactor 线程模型。 Netty 中最核心的东西莫过于两种类型的 Reactor 线程。这两种类型的 Reactor 线程可以看作 Netty 中的两组发动机,驱动着 Ne
阅读全文
摘要:1. NioEventLoopGroup 创建 这部分,我们着重分析下面两行代码。 NioEventLoopGroup bossGroup = new NioEventLoopGroup(1); NioEventLoopGroup workerGroup = new NioEventLoopGrou
阅读全文
摘要:1. 服务端启动示例 @Slf4j public class NettyServer { public static void main(String[] args) { NioEventLoopGroup bossGroup = new NioEventLoopGroup(1); NioEvent
阅读全文
摘要:1. ProtoBuf 说明 1.1 编码和解码 编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码。 codec(编解码器)的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数
阅读全文
摘要:1. 群聊系统(简版) a. 服务端 package org.example.netty.chat; import cn.hutool.core.util.StrUtil; import io.netty.bootstrap.ServerBootstrap; import io.netty.chan
阅读全文
摘要:1. Bootstrap Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件。有两个启动器,分别应用在服务器和客户端:(1)Bootstrap 是客户端程序的启动引导类;(2)ServerBootstrap
阅读全文
摘要:1. 功能特性 传输服务:支持 BIO 和 NIO; 容器集成:支持 OSGI、JBossMC、Spring、Guice 容器; 协议支持:HTTP、Protobuf、二进制、文本、WebSocket 等一系列常见协议都支持,还支持通过实行编码解码逻辑来实现自定义协议; Core 核心:可扩展事件模
阅读全文
摘要:1. NIO 群聊系统 编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)。 服务端:可以监测用户上线、离线,并实现消息转发功能; 客户端:通过 Channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(由服务器转发得到)。 a. GroupChat
阅读全文
摘要:1. Netty 简述 1.1 是什么 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。 Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 主要针对在 TCP 协议下,面向 Clients
阅读全文
