在上节介绍的EventLoop基础上,就可以正式开发网络库需要的面向外部的接口。
网络库主要包括TcpServer,TcpConnection,Acceptor,Connector,TcpClient。前三者用于服务端,后两者用于客户端。此外还有一个用于封装socket api的Socket类
一、服务端成员:
TcpServer是服务器的基础。一个TcpServer包含一个主loop、一个线程池和一个Acceptor,当TcpServer启动的时候,会在主loop中启动Acceptor的listen,从而监听对应的套接字。当有新连接到来时,则会调用Acceptor的Channel中的读回调,该回调由TcpServer注册,一般是TcpServer中的新连接处理函数。
每个新连接由一个TcpConnection封装,负责该连接的一切事件处理,当连接关闭的时候,由该TcpConnection回调到TcpServer中,进行相应的清理工作。
TcpServer中有一个线程池,每当新连接到来时,则从线程池中取一个线程对应的EventLoop,并将新建立的TcpConnection分配给这个loop来处理。
二、客户端成员:
客户端的连接主体是TcpClient,内部封装了一个Connector。向服务端的连接请求,包括重连尝试等操作封装在Connector里面,连接成功建立之后,Connector会将套接字信息通过TcpClient注册的回调函数返回给TcpClient。
在TcpClient的连接建立回调中,会根据套接字信息创建一个TcpConnection对象,以此来维护与服务端的连接。