Netty通信

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-》轮询读写事件-》处理读写事件


版权声明:本文为weixin_43991053原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。