随笔分类 - 后端
摘要:之前的案例如下 现在将ChannelInitializer提取出来 编写服务端 public class TestServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup =
阅读全文
摘要:简介 1) 异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者。 2) Netty 中的 I/O 操作是异步的,包括 Bind、Write、Connect 等操作会简单的返回一个ChannelFuture。 3)
阅读全文
摘要:任务队列中的 Task 有 3 种典型使用场景 1) 用户程序自定义的普通任务 [举例说明] 2) 用户自定义定时任务 3) 非当前 Reactor 线程调用 Channel 的各种方法 例如在推送系统的业务线程里面,根据用户的标识,找到对应的 Channel 引用,然后调用 Write 类方法向该
阅读全文
摘要:导入依赖 // https://mvnrepository.com/artifact/io.netty/netty-all implementation group: 'io.netty', name: 'netty-all', version: '4.1.51.Final' 服务端 public
阅读全文
摘要:简介 Netty 主要基于主从 Reactors 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor 1) BossGroup 线程维护Selector , 只关注Accecpt2) 当接收到Accept事件,获取到对应的 SocketChannel, 封装成 NI
阅读全文
摘要:根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现 1) 单 Reactor 单线程 2) 单 Reactor 多线程 3) 主从 Reactor 多线程 单 Reactor 单线程 1) Select 是前面 I/O 复用模型介绍的标准网络编程 API,可以实现应用程序通
阅读全文
摘要:原生NIO存在的问题 1) NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。 2) 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor模
阅读全文
摘要:在 Java 程序中,常用的零拷贝有 mmap(内存映射射) 和 sendFile 传统io mmap优化 mmap 通过内存映射,将文件映射到内核缓冲区,同时,用户空间可以共享内核空间的数据。 这样,在进行网络传输时,就可以减少内核空间到用户控件的拷贝次数 sendFile优化 Linux 2.1
阅读全文
摘要:简介 1) 编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞) 2) 实现多人群聊 3) 服务器端:可以监测用户上线,离线,并实现消息转发功能 4) 客户端:通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到) 编写服务端
阅读全文
摘要:SelectionKey 1) SelectionKey,表示 Selector 和网络通道的注册关系, 共四种: int OP_ACCEPT:有新的网络连接可以 accept,值为 16 int OP_CONNECT:代表连接已经建立,值为 8 int OP_READ:代表读操作,值为 1 int
阅读全文
摘要:编写服务端 public class NIOServer { public static void main(String[] args) throws Exception{ //创建ServerSocketChannel -> ServerSocket ServerSocketChannel se
阅读全文
摘要:简介 1) Java 的 NIO,用非阻塞的 IO 方式。可以用一个线程,处理多个的客户端连接,就会使用到Selector(选择器) 2) Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然
阅读全文
摘要:ByteBuffer 支持类型化的put 和 get, put 放入的是什么数据类型,get就应该使用相应的数据类型来取出,否则可能有 BufferUnderflowException 异常。 代码案例 public class NIOByteBufferPutGet { public static
阅读全文
摘要:简介 1) NIO的通道类似于流,但有些区别如下: • 通道可以同时进行读写,而流只能读或者只能写 • 通道可以实现异步读写数据 • 通道可以从缓冲读数据,也可以写数据到缓冲 2) BIO 中的 stream 是单向的,例如 FileInputStream 对象只能进行读取数据的操作,而 NIO 中
阅读全文
摘要:简介 缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松地使用内存块, 缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由 Bu
阅读全文
摘要:简介 1) Java NIO 全称 java non-blocking IO,是指 JDK 提供的新API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的 2) NIO 相关类都被放在 java.nio 包及子包下,并且对
阅读全文
摘要:简介 1) Java BIO 就是传统的java io 编程,其相关的类和接口在 java.io 2) BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理, 如果这个连接不做任何事情会造成不必要的线程开销,可以通
阅读全文
摘要:简介 1) Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。 2) Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。 3) Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Pe
阅读全文
摘要:SpringBoot启动过程 ● 创建 SpringApplication ○ 保存一些信息。 ○ 判定当前应用的类型。ClassUtils。Servlet ○ bootstrappers:初始启动引导器(List<Bootstrapper>):去spring.factories文件中找 org.s
阅读全文
浙公网安备 33010602011771号