Linux
分类: LINUX
2015-07-06 12:11:41
Net子系统是一个封装网络API的模块,提供接收和新建TCP和UDP连接以及读写这些连接的接口。Net子系统可以高效地管理大量的连接。使用 Net子系统的另一个好处是SM(状态机)不用关心不同操作系统网络API的差异。SM使用Net子系统的全局对象netProcessor来创建新的连接或接收传入的连接。SM创建连接时会获得一个用来处理底层的连接的NetVConnection。使用NetConnection可以获得连接的属性,读写数据等。
netProcessor是Net子系统的核心,提供通用的网络API,如accept、connect等。它通过一个状态机来完成网络I/O。
netProcessor提供的函数:
作为一个Proxy,Traffic Server的一个主要工作是accept来自用户的请求。NetProcessor::accept()和 NetProcessor::main_accept()都调用了UnixNetProcessor::accept_internal()函数,而后者的工作是new NetAccept。NetAccept是一个通用的处理正在被接收连接的类,它可以接收来自不同类型的连接,比如一个可阻塞的线程或通过自适应轮询。 NetAccept::init_accept()调用eventProcessor.assign_thread(etype)分配一个线程,并调用 schedule_every(NetAccept::acceptEvent)来轮询执行。
Traffic Server的另外一个工作是和OS(original server)的通信,NetProcessor::connect_re()调用了 UnixNetProcessor::connect_re_internal(),后者new一个UnixNetVConnection,分配一个 SocksEntry,调用eventProcessor.schedule_imm(vc, opt->etype)来执行一个VConnection。NetVConnection是一个网络socket的VConnection,是一个网络连接的抽象。而UnixNetVConnection是NetVConnection在类unix系统上的实现。
以上就是Net子系统主要的功能。Traffic Server还在SocketManager类以及ink_sock.cc中对网络API进行了函数封装,比如对EAGAIN、EINTR等情况的处理。