Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12573
  • 博文数量: 4
  • 博客积分: 170
  • 博客等级: 入伍新兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-08 17:10
文章分类
文章存档

2011年(1)

2010年(3)

我的朋友

分类:

2011-02-10 17:30:15

    Traffic Server设计的思想是将一个大系统划分为若干个小的子系统,每个子系统负责专门的任务或应用。比如,Event子系统负责提供任务调度服务,Net子系统负责提供网络服务。每个子系统抽象为一个Processor,如图1所示。这种高内聚低耦合的设计原则使系统具有更好的重用性,维护性和扩展性。例如,如果hostDBProcessor需要进行DNS解析,可以直接调用dnsProcessor的相关函数,而无需关注DNS解析的细节;dnsProcessor也只需封装DNS请求和解析DNS应答,和网络相关的功能可以调用netProcessor来完成。Event子系统已经在“Traffic Server多线程异步事件处理模型”中说明过了,下面简单介绍一下Net子系统。

1 Traffic Server子系统划分

Net子系统是一个封装网络API的模块,提供接收和新建TCPUDP连接以及读写这些连接的接口。Net子系统可以高效地管理大量的连接。使用Net子系统的另一个好处是SM(状态机)不用关心不同操作系统网络API的差异。SM使用Net子系统的全局对象netProcessor来创建新的连接或接收传入的连接。SM创建连接时会获得一个用来处理底层的连接的NetVConnection。使用NetConnection可以获得连接的属性,读写数据等。

netProcessorNet子系统的核心,提供通用的网络API,如acceptconnect等。它通过一个状态机来完成网络I/O

netProcessor提供的函数:

  • start():启动netProcessor,在main函数中调用。它使用Event Processor的线程来执行函数。
  • accept():接收端口上的连接。回调函数NET_EVENT_ACCEPTEVENT_ERROR,可重入的回调函数NET_EVENT_ACCEPT_SUCCEEDNET_EVENT_ACCEPT_FAILED。返回一个Action,可以用来取消本次accept
  • main_accept():在端口上接收传入的连接。和accept的区别是参数列表是受限的。
  • connect_s():为面向连接的I/O打开一个NetVConnection。该函数只有在连接建立之后才返回,是同步调用机制。
  • connect_re():为面向连接的I/O打开一个NetVConnection。可重入的回调函数NET_EVENT_OPENNET_EVENT_OPEN_FAILED,是异步调用机制。

作为一个ProxyTraffic Server的一个主要工作是accept来自用户的请求。NetProcessor::accept()NetProcessor::main_accept()都调用了UnixNetProcessor::accept_internal()函数,而后者的工作是new NetAcceptNetAccept是一个通用的处理正在被接收连接的类,它可以接收来自不同类型的连接,比如一个可阻塞的线程或通过自适应轮询。NetAccept::init_accept()调用eventProcessor.assign_thread(etype)分配一个线程,并调用schedule_every(NetAccept::acceptEvent)来轮询执行。

Traffic Server的另外一个工作是和OSoriginal server)的通信,NetProcessor::connect_re()调用了UnixNetProcessor::connect_re_internal(),后者new一个UnixNetVConnection,分配一个SocksEntry,调用eventProcessor.schedule_imm(vc, opt->etype)来执行一个VConnectionNetVConnection是一个网络socketVConnection,是一个网络连接的抽象。而UnixNetVConnectionNetVConnection在类unix系统上的实现。

以上就是Net子系统主要的功能。Traffic Server还在SocketManager类以及ink_sock.cc中对网络API进行了函数封装,比如对EAGAINEINTR等情况的处理。

阅读(1133) | 评论(1) | 转发(1) |
0

上一篇:Traffic Server多线程异步事件处理模型

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2011-03-06 09:14:58

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com