Netty是一个事件驱动型、高可用高性能的网络通信应用系统,支持定制化协议
传统的通信流程:
1、服务端创建一个serversocket,绑定一个监听端口
2、多个客户端向这个端口发送请求
3、服务端通过Accept获取一个客户端的socket连接对象,建立socket连接
4、服务端创建read线程读取socket字节流,解码得到Http请求对象,完成后,将结果封装response,编码协议将结果序列化成字节流
5、服务端创建write线程将字节流发给客户端,客户端接收响应
6、通信完成后,关闭socket
Accept是阻塞的,只有新连接来了,Accept才会返回,主线程才能继
Read是阻塞的,只有请求消息来了,Read才能返回,子线程才能继续处理
Write是阻塞的,只有客户端把消息收了,Write才能返回,子线程才能继续读取下一个请求
所以传统的通信流程是BIO阻塞io
Netty通信:
采用的是事件机制。它可以用一个线程把Accept,读写操作,请求处理的逻辑全干了。如果什么事都没得做,它也不会死循环,它会将线程休眠起来,直到下一个事件来了再继续干活,这样的一个线程称之为NIO线程。
当一个Socket建立好之后,Thread并不会阻塞去接受这个Socket,而是将这个请求交给Selector,Selector会不断的去遍历所有的Socket,一旦有一个Socket建立完成,他会通知Thread,然后Thread处理完数据再返回给客户端——这个过程是不阻塞的,这样就能让一个Thread处理更多的请求了。
Netty基本流程:
Netty启动,监听端口,初始化通道注册进selector中-》轮询accept事件-》处理accept建立连接channel-》注册channel到selector-》轮询读写事件-》处理读写事件