服务初始化阶段:
ACE_SOCK_Connector peer_connector_;
peer_connector_.connect(server_addr);
ACE_SOCK_Acceptor peer_acceptor_;
peer_acceptor_.open(addr);
服务处理阶段:
ACE_SOCK_Stream peer;
peer.send_n(buf,size,timeout);
peer.recv_n(buf,size,timeout);
2.2 ACE Reactor
反应器(Reactor):用于事件多路分离和分派的体系结构模式。通常,对一个文件描述符指定的文件或设备有两种工作方式: 阻塞与非阻塞。所谓阻塞方式是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。
在大部分tcp通信的例子中,采用阻塞式的工作方式:当接收tcp数据时,如果远端没有数据可以读,则会一直阻塞到读到需要的数据为止。这种方式的传输和传统的被动方法的调用类似,非常直观,并且简单有效,但是同样也存在一个效率问题,如果开发一个面对数千个连接的服务器程序,对每一个客户端都采用阻塞的方式通信,如果存在某个非常耗时的读写操作时,其他的客户端通信将无法响应,效率非常低下。 一种常用做法是:每建立一个Socket连接时,同时创建一个新线程对该Socket进行单独通信(采用阻塞的方式通信)。这种方式具有很高的响应速度,并且控制起来也很简单,在连接数较少的时候非常有效,但是如果对每一个连接都产生一个线程无疑是对系统资源的一种浪费,如果连接数较多将会出现资源不足的情况。
|