摘要: RPC 基本介绍 RPC(Remote Procedure Call)-- 远程过程调用, 是一个计算机通信协议, 该协议允许运行于一台计算机的程序调用另一台计算机的子程序, 而程序员无需额外的为这个交互过程编程 两个或多个应用程序都分布在不同的服务器上,他们之间的调用都像是本地方法调用一样(如图) 阅读全文
posted @ 2022-01-21 16:28 彼岸舞 阅读(145) 评论(0) 推荐(0) 编辑
摘要: TCP粘包和拆包的基本介绍 TCP是面向连接的, 面向流的, 提供可靠性服务, 收发两端(客户端和服务器端) 都有一一成对的Socket,因此发送端为了将多个发给接收端的包, 更有效的发给对方, 使用了优化算法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包, 阅读全文
posted @ 2022-01-21 16:21 彼岸舞 阅读(1825) 评论(0) 推荐(0) 编辑
摘要: Log4j整合到Netty 添加POM依赖 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <group 阅读全文
posted @ 2022-01-21 16:15 彼岸舞 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 基本说明 Netty的组件设计: Netty的主要组件有Channel, EventLoop, ChannelFuture, ChannelHandler, ChannelPipeline等 ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器, 例如: 实现ChannelInb 阅读全文
posted @ 2022-01-21 16:14 彼岸舞 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 编码和解码的基本介绍 编写网络应用程序时, 因为数据在网络中传输的都是二进制字节码数据, 在发送数据时就需要编码, 接收数据时就需要解码 codec(编解码器) 的组成部分有两个 : decoder(解码器)和encoder(编码器). encoder负责把业务数据转换成字节码数据, decoder 阅读全文
posted @ 2022-01-21 16:08 彼岸舞 阅读(228) 评论(0) 推荐(0) 编辑
摘要: Netty通过WebSocket编程实现服务器与客户端长连接 需求 Http协议是无状态的,浏览器和服务器间的请求响应一次, 下一次会重新创建连接 要求: 实现基于WebSocket的长链接的全双工的交互 改变Http协议多次请求的约束, 实现长链接, 服务器可以发送消息给浏览器 客户端浏览器和服务 阅读全文
posted @ 2022-01-21 15:37 彼岸舞 阅读(273) 评论(0) 推荐(0) 编辑
摘要: Netty心跳检测机制 需求 编写一个Netty心跳检测机制案例, 当服务器超过3秒没有读时,就提示读空闲 当服务器超过5秒没有写操作时, 就提示写空闲 实现当服务器超过7秒没有读或者写操作时, 就提示读写空闲 代码如下 NettyServerHertbeat package com.dance.n 阅读全文
posted @ 2022-01-21 15:30 彼岸舞 阅读(66) 评论(0) 推荐(0) 编辑
摘要: Netty应用实例 - 群聊系统 需求 编写一个Netty群聊系统, 实现服务器端和客户端之间的数据简单通讯(非阻塞) 实现多人群聊 服务器端: 可以监测用户上下, 离线, 并实现消息转发功能 客户端: 通过channel可以无阻塞发送消息给其他所有用户同时可以接收其他用户发送的消息(由服务器转发得 阅读全文
posted @ 2022-01-21 15:28 彼岸舞 阅读(147) 评论(0) 推荐(0) 编辑
摘要: Bootstrap, ServerBootstrap Bootstrap 意思是引导, 一个Netty应用通常由一个Bootstrap开始, 主要作用的配置整个Netty程序, 串联各个组件, Netty中Bootstrap类是客户端程序的启动引导类, ServerBootstrap是服务器端程序的 阅读全文
posted @ 2022-01-21 15:25 彼岸舞 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 快速入门实例-HTTP 服务 D实例要求:使用IDEA创建Netty项目 Netty服务器在6668端口监听,浏览器发出请求“http://localhost:6668/ 服务器可以回复消息给客户端“Hello!我是服务器5”,并对特定请求资源进行过滤 目的:Netty可以做Http服务开发,并且理 阅读全文
posted @ 2022-01-21 14:42 彼岸舞 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 异步模型 基本介绍 异步模型和同步模型相对, 当一个异步过程调用发出后, 调用者不能立刻得到结果, 实际处理这个调用的组件在完成后,通过状态, 通知和回调来通知调用者 Netty中的IO操作是异步的,包括bind, write, Connect等操作会简单的返回一个ChannelFuture 调用者 阅读全文
posted @ 2022-01-21 14:38 彼岸舞 阅读(194) 评论(0) 推荐(0) 编辑
摘要: TaskQueue 任务队列 任务队列中的Task有三种典型使用场景 用户程序自定义的普通任务 [举例说明] 用户自定义定时任务 非当前Reactor线程调用Channel的各种方法 例如在推送系统的业务线程里面, 根据用户的标识, 找到对应的Channel引用,然后调用Write类方法向该用户推送 阅读全文
posted @ 2022-01-21 14:35 彼岸舞 阅读(330) 评论(0) 推荐(0) 编辑
摘要: Netty快速入门实例-TCP服务 需求 使用IDEA创建Netty项目 Netty服务器在6668端口监听, 客户端能发送消息给服务器"Hello, 服务器~" 服务器可以回复消息给客户端"hello, 客户端~" 目的: 对Netty线程模型 有一个初步认识, 便于理解Netty 模型理论 编写 阅读全文
posted @ 2022-01-21 11:33 彼岸舞 阅读(159) 评论(0) 推荐(0) 编辑
摘要: Netty模型 工作原理示意图 1-简单版 Netty主要是基于主从Reactors多线程模型(如图)做了一定的改进, 其中主从Reactor 多线程模型有多个Reactor 对上图的说明 BossGroup线程维护Selector,只关注Accecpt 当接收到Accept事件,获取到对应的Soc 阅读全文
posted @ 2022-01-21 11:26 彼岸舞 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 线程模型基本介绍 不同的线程模型, 对程序的性能有很大影响,为了搞清Netty线程模式,我们来系统的讲解下各个线程模式,最后看看Netty线程模型有什么优越性 目前存在的线程模型有 传统阻塞IO服务模型 Reactor模式 根据Reactor的数量和处理资源线程池的数量不同,有三种典型的实现 单 R 阅读全文
posted @ 2022-01-21 11:25 彼岸舞 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 原生NIO存在的问题 NIO的类库和API繁杂,使用麻烦,需要熟练掌握,Selector,ServerSocketChannel, SocketChannel,ByteBuffer等 需要具备其他额外技能,要熟悉Java多线程编程,应为NIO编程涉及到Reactor模式,必须对多线程和网络编程非常熟 阅读全文
posted @ 2022-01-21 11:16 彼岸舞 阅读(70) 评论(0) 推荐(0) 编辑
摘要: NIO 与 零拷贝 零拷贝基本介绍 零拷贝是网络编程的关键, 很多性能优化都离不开 在Java程序中, 常用的零拷贝有mmap(内存映射) 和 sendFile. 那么, 他们在OS里, 到底是咋么样的一个设计? 我们分析mmap和sendFile这两个零拷贝 另外我们看一下NIO中如何使用零拷贝 阅读全文
posted @ 2022-01-21 11:14 彼岸舞 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 需求 编写一个NIO群聊系统,实现服务器端和客户端之间的数据简单通讯,非阻塞 实现多人群聊 服务器端: 可以监测用户上线, 离线, 并实现消息转发功能 客户端: 通过Channel可以无阻塞发送消息给其他用户,同时可以接受其他用户发送的消息(由服务器转发得到) 目的: 进一步了解NIO非阻塞网络编程 阅读全文
posted @ 2022-01-21 11:12 彼岸舞 阅读(76) 评论(0) 推荐(0) 编辑
摘要: NIO 基本介绍 Java NIO 全称 java non-blocking IO,是指JDK提供的新API,从JDK1.4提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO),是同步非阻塞的 NIO 相关类都被放在java.nio包及子包下,并对原Java.io包中的很多类进行改 阅读全文
posted @ 2022-01-21 11:10 彼岸舞 阅读(62) 评论(0) 推荐(0) 编辑
摘要: I/O 模型 I/O 模型基本说明 I/O 模型简单的理解: 就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java共支持三种网络编程模型 I/O模式: BIO NIO AIO Java BIO: 同步并阻塞(传统阻塞型), 服务器实现模式为一个连接一个线程,即客户端有连接 阅读全文
posted @ 2022-01-21 11:02 彼岸舞 阅读(51) 评论(0) 推荐(0) 编辑