# wlf-netty **Repository Path**: wang_lf/wlf-netty ## Basic Information - **Project Name**: wlf-netty - **Description**: netty学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-10-11 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README netty 是异步的、基于事件驱动的网络应用框架 netty 主要针对在tcp协议下,面向clients端的高并发应用,或者 peer-to-peer场景下 大量数据持续传输的应用 netty本质是一个nio的框架 io模型:BIO,NIO,AIO BIO:同步并阻塞,服务器实现模式为一个连接一个线程。 客户端有链接请求时服务端就需要启动一个线程进行处理, 如果这个连接不做任何事情就会造成不必要的线程开销 NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接)。 客户端的连接都会注册到多路复用器上,多路复用器轮询到连接有io请求就进行处理。 AIO:异步非阻塞,没有得到广泛的使用。引入异步通道的概念,采用proactor模式, 先有操作系统完成后才通知服务端程序启动线程去处理 BIO编程简单流程(阻塞连接,阻塞接收信息数据) 1)服务器端启动一个serverSocket 2)客户端启动socket对服务器进行通信,默认情况下服务器端需要对每个请求建立一个线程与之通信 3)客户端发出请求后,先咨询服务器是否有线程响应,如果没有则会等待 或者遭到拒绝 4)如果有响应,客户端线程会等待请求结束后,才继续执行 缺点: 1)每个请求都要创建独立的线程,当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大; 2)连接建立后,如果当前线程暂时没有数据可读,则线程阻塞 NIO 包含三大核心部分:CHANNEL(通道)、BUFFER(缓冲区)、SELECTOR(选择器) NIO基于channel和buffer进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道, selector用于监听多个通道的事件,因此使用单个线程就可以监听多个客户端通道。 缓冲区buffer:缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组), 该对象提供了一组方法,可以轻松的使用内存块,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。 channel提供从文件、网络读取数据的渠道,但是读取或写入数据都必须经由buffer。 selector选择器:可以检测到多个注册的通道上是否有事件发生,如果有事件发生, 便获取事件然后针对事件进行相应的处理。