随笔 - 1162
文章 - 0
评论 - 16
阅读 -
59万
随笔分类 - Netty
第五章—Netty高性能架构设计:(5)HTTP服务
摘要:HTTP服务案例 案例要求:使用IDEA创建Netty项目 (1)Netty 服务在6688 端口监听,浏览器发出请求 "http://localhost:6688/"; (2)服务器可以回复消息给客户端 "Hello,我是服务器!",并对特定请求资源进行过滤; (3)目的:Netty 可以做Htt
阅读全文
第五章—Netty高性能架构设计:(4)Netty异步模型
摘要:一、异步模型 1、基本介绍 (1)异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。 (2)Netty 中的 I/O 操作是异步的,包括 Bind、 Write、 Connect 等操作会简单的返回一个Chann
阅读全文
第五章—Netty高性能架构设计:(3)Netty模型
摘要:一、Netty 工作原理示意图-简单版 Netty 主要基于主从 Reactors 多线程模型(如图) 做了一定的改进, 其中主从 Reactor 多线程模型有多个 Reactor 图解说明: (1)BossGroup 线程维护 Selector , 只关注Accecpt; (2)当接收到Accep
阅读全文
第五章—Netty高性能架构设计:(2)Reactor线程模式
摘要:一、Reactor 模式分类: 根据 Reactor 的数量和处理资源池线程的数量不同, 有 3 种典型的实现 单 Reactor 单线程 单 Reactor 多线程 主从 Reactor 多线程 二、单 Reactor 单线程 1、工作原理示意图 原理图,并使用 NIO 群聊系统验证:Reacto
阅读全文
第五章—Netty高性能架构设计:(1)线程模型介绍
摘要:一、线程模型基本介绍 (1)不同的线程模式,对程序的性能有很大影响,为了搞清Netty 线程模式,我们来系统的讲解下各个线程模式, 最后看看Netty 线程模型有什么优越性. (2) 目前存在的线程模型有: 传统阻塞 I/O 服务模型 Reactor 模式 (3)根据 Reactor 的数量和处理资
阅读全文
第四章—Netty:(1)Netty概述
摘要:一、原生NIO存在的问题 (1) NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。 (2)需要具备其他的额外技能:要熟悉 Java 多线程编程, 因为 NIO 编程涉及到 Reac
阅读全文
第三章—Java NIO编程:(9)AIO及三种IO对比
摘要:一、Java AIO 基本介绍 JDK 7 引入了 Asynchronous I/O, 即 AIO。 在进行 I/O 编程中,常用到两种模式:Reactor和 Proactor。Java 的 NIO 就是 Reactor,当有事件触发时,服务器端得到通知, 进行相应的处理。 AIO 即 NIO2.0
阅读全文
第三章—Java NIO编程:(8)零拷贝
摘要:一、零拷贝基本介绍 (1)零拷贝是网络编程的关键, 很多性能优化都离不开。 (2)在 Java 程序中,常用的零拷贝有 mmap(内存映射) 和 sendFile。那么,他们在OS里,到底是怎么样的一个的设计? 我们分析 mmap 和 sendFile 这两个零拷贝。 (3)另外我们看下NIO 中如
阅读全文
第三章—Java NIO编程:(7)群聊系统
摘要:一、案例要求 实例要求: 编写一个 NIO 群聊系统, 实现服务器端和客户端之间的数据简单通讯(非 阻塞) 实现多人群聊 服务器端: 可以监测用户上线, 离线,并实现消息转发功能 客户端: 通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受 其它用户发送的消息(有服务器转发得到) 目
阅读全文
第三章—Java NIO编程:(6)SelectionKey、ServerSocketChannel与SocketChannel
摘要:一、 SelectionKey 1、SelectionKey SelectionKey, 表示Selector和网络通道(Channel)绑定的关系。 以 SelectorImpl 为例,看一下源码: public abstract class SelectorImpl extends Abstra
阅读全文
第三章—Java NIO编程:(5)Selector 选择器
摘要:一、Selector 基本介绍 (1)Java的NIO,用非阻塞的IO方式。可以用一个线程,处理多个的客户端连接,就会使用到 Selector(选择器)。 (2)Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector), 如果有
阅读全文
第三章—Java NIO编程:(4)Channel 通道
摘要:一、Channel 基本介绍 (1)NIO 的通道类似于流,但有些区别如下: ① 通道可以同时进行读写,而流只能读或者只能写; ② 通道可以实现异步读写数据; ③ 通道可以从缓冲读数据,也可以写数据到缓存; (2)BIO 中的 stream 是单向的, 例如 FileInputStream 对象只能
阅读全文
第三章—Java NIO编程:(3)Buffer 缓冲区
摘要:一、缓冲区(Buffer)基本介绍 缓冲区(Buffer) : 缓冲区本质上是一个可以读写数据的内存块, 可以理解成是一个容器对象(含数组), 该对象提供了一组方法, 可以更轻松地使用内存块,缓冲区对象内置了一些机制, 能够跟踪和记录缓冲区的状态变化情况。 Channel 提供从文件、网络读取数据的
阅读全文
第三章—Java NIO编程:(2)Java NIO 三大核心原理示意图
摘要:NIO 三大核心原理示意图 一张图描述NIO 的 Selector 、Channel 和 Buffer 的关系 关系图说明: (1)每个channel 都会对应一个Buffer; (2)Selector 对应一个线程, 一个线程对应多个channel(连接); (3)该图反应了有三个channel
阅读全文
第三章—Java NIO编程:(1)Java NIO 基本介绍
摘要:一、Java NIO 基本介绍 (1)Java NIO 全称 java non-blocking IO, 是指 JDK 提供的新API。 从 JDK1.4 开始, Java 提供了一系列改进的输入/输出的新特性, 被统称为 NIO(即 New IO), 是同步非阻塞的。 (2)NIO 相关类都被放在
阅读全文
第二章—Java BIO 编程:(2)Java BIO 编程
摘要:一、Java BIO 基本介绍 (1)Java BIO 就是传统的java io 编程, 其相关的类和接口在 java.io; (2)BIO(blocking I/O) : 同步阻塞, 服务器实现模式为一个连接一个线程, 即客户端有连接请求时服务器端就需要启动一个线程进行处理, 如果这个连接不做任何
阅读全文
第二章—Java BIO 编程:(1)I/O 模型
摘要:一、I/O 模型 I/O 模型简单的理解: 就是用什么样的通道进行数据的发送和接收, 很大程度上决定了程序通信的性能。 Java共支持3种网络编程模型/IO模式: BIO、 NIO、 AIO 1、Java BIO:同步并阻塞(传统阻塞型) 同步并阻塞(传统阻塞型), 服务器实现模式为一个连接一个线程
阅读全文
第一章—Netty 介绍与应用:(1)Netty 介绍与应用场景
摘要:一、Netty 的介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架, 现为 Github上的独立项目。 Netty 是一个异步的、 基于事件驱动的网络应用框架, 用以快速开发高性能、 高可靠性的网络 IO 程序。 Netty主要针对在TCP协议下, 面向Clients端的高并发应用
阅读全文
Netty【目录】
摘要:一、Netty 介绍与应用 1、Netty 介绍与应用场景 二、Java BIO 编程 1、I/O 模型 2、Java BIO 编程 三、Java NIO 编程 1、Java NIO 基础介绍 2、Java NIO 三大核心原理示意图 3、Buffer 缓冲区 4、Channel 通道 5、Sele
阅读全文