若有收获,请记得分享和转发哦
在学习 Netty 框架前有一个话题是无法绕过的,就是:网络编程 IO 模型,听见 IO 模型有些同学就开始背八股文了,Java 常见 IO 模型有:
同步阻塞 BIO
同步非阻塞 NIO
异步非阻塞 AIO
今天跟大家一起重温下这些知识点。
Socket 网络编程
网络编程中有一个重要的概念就是:Socket
,我们简单了解一下。
在网络通信中,客户端和服务端通过一个双向的通信连接实现数据的交换,连接的任意一端都可称为一个 Socket。
Talk is cheap, show me the diagram
,Socket 网络通信基本过程如下图所示:
总结一下流程,可以简单描述为这四步:
(1)服务端启动,监听指定端口,等待客户端连接;
(2)客户端尝试与服务端连接,建立可信数据传输通道;
(3)客户端与服务端进行数据交换;
(4)客户端或者服务端断开连接,终止通信;
读写事件的发生将其交由某个空闲的线程处理。
Buffer、Channel、Selector 这三个组件的之间的关系可以用下面的图来描述: