Acceptor-Connector模式一(Acceptor的工作)V2.0
前言:ACE Acceptor-Connector模式
模式思想
相关类
一、接收器的工作
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
二、接收器handle_input的工作
template <typename PEER_STREAM, typename SYNCH_TRAITS> int
ACE_Svc_Handler<PEER_STREAM, SYNCH_TRAITS>::handle_close (ACE_HANDLE,
ACE_Reactor_Mask)
{
ACE_TRACE ("ACE_Svc_Handler<PEER_STREAM, SYNCH_TRAITS>::handle_close"); if (this->reference_counting_policy ().value () ==
ACE_Event_Handler::Reference_Counting_Policy::DISABLED)
{
this->destroy ();
} return 0;
}
template <typename PEER_STREAM, typename SYNCH_TRAITS> void
ACE_Svc_Handler<PEER_STREAM, SYNCH_TRAITS>::destroy (void)
{
ACE_TRACE ("ACE_Svc_Handler<PEER_STREAM, SYNCH_TRAITS>::destroy"); // Only delete ourselves if we're not owned by a module and have
// been allocated dynamically.
if (this->mod_ == 0 && this->dynamic_ && this->closing_ == false)
// Will call the destructor, which automatically calls <shutdown>.
// Note that if we are *not* allocated dynamically then the
// destructor will call <shutdown> automatically when it gets run
// during cleanup.
delete this;
}
演示样例
以下的程序会在1500port持续监听,每当有对端发来连接。就创建本地连接处理对象,创建完之后就通过连接处理对象的open返回-1来告诉反应器来释放该对象。
Acceptor 服务端
#include <ace/Log_Msg.h>
#include "ace/Svc_Handler.h"
#include <ace/Acceptor.h>
#include "ace/SOCK_Acceptor.h"
#include "ace/INET_Addr.h"
#include "ace/Reactor.h" class My_Time_Server_Handler : public ACE_Svc_Handler<ACE_SOCK_Stream,ACE_NULL_SYNCH>
{
public:
~My_Time_Server_Handler();
//由接收器在接收到对端的连接请求之后调用此方法
virtual int open(void *)
{
ACE_DEBUG((LM_DEBUG,"one client connection established.\n"));
return -1;// ERROR
}
}; My_Time_Server_Handler::~My_Time_Server_Handler()
{
ACE_DEBUG((LM_DEBUG,"~My_Time_Server_Handler()\n"));
} int main(int argc, char *argv[])
{
ACE_INET_Addr local_addr(1500); ACE_Acceptor<My_Time_Server_Handler,ACE_SOCK_Acceptor> acceptor; acceptor.open(local_addr,ACE_Reactor::instance());
//截过连接信息
ACE_Reactor::instance()->run_reactor_event_loop(); return 0;
}
Connector客户端
#include <ace/Log_Msg.h>
#include <ace/SOCK_Connector.h>
#include "ace/INET_Addr.h" int main(int argc, char *argv[])
{
ACE_INET_Addr addr(1500,"127.0.0.1"); //remote address
ACE_SOCK_Connector client_connetor; // connetor for socket client
ACE_SOCK_Stream sock_stream; // stream is for socket read/write if(client_connetor.connect(sock_stream,addr)==-1) //connect to remote address
{
ACE_DEBUG ((LM_DEBUG,ACE_TEXT ("(%P|%t) %p\n"),ACE_TEXT ("connection failed!")));
return -1;
}
if (sock_stream.close () == -1) //close the connection
{
ACE_ERROR ((LM_ERROR,ACE_TEXT ("(%P|%t) %p\n"),ACE_TEXT ("sock close")));
return -1;
}
return 0;
}
执行结果:每次执行client都会创建一个服务端的服务处理对象,并随即被释放(我们有益让open方法返回-1来释放服务处理对象,从而来说明整个事件的流程)
Acceptor-Connector模式一(Acceptor的工作)V2.0的更多相关文章
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- Eureka 系列(06)消息广播(下):TaskDispacher 之 Acceptor - Worker 模式
Eureka 系列(06)消息广播(下):TaskDispacher 之 Acceptor - Worker 模式 [TOC] Spring Cloud 系列目录 - Eureka 篇 Eureka ...
- 网关局域网通信协议V2.0
http://docs.opencloud.aqara.cn/development/gateway-LAN-communication/ https://github.com/aqara/openc ...
- SteamVR Unity Plugin - v2.0.1中的InteractionSystem
最近写VR项目的时候用到了SteamVR Unity Plugin - v2.0.1插件,感觉比之前用到的SteamVR plugin for Unity - v1.2.2版本改进了很多,就算不用VR ...
- 运维工程师打怪升级进阶之路 V2.0
在此之前,发布过两个版本: 运维工程师打怪升级之路 V1.0 版本发布 运维工程师打怪升级必经之路 V1.0.1 很多读者伙伴们反应总结的很系统.很全面,无论是0基础初学者,还是有基础的入门者,或者是 ...
- BurpSuite pro v2.0 使用入门教程
BurpSuite简介 BurpSuite是进行Web应用安全测试集成平台.它将各种安全工具无缝地融合在一起,以支持整个测试过程中,从最初的映射和应用程序的攻击面分析,到发现和利用安全漏洞.Burps ...
- POLARDB v2.0 技术解读
点击观看“POLARDB 2.0 升级发布会”:https://yq.aliyun.com/live/1136 回顾POLARDB 1.0 POLARDB 1.0 主要的改进包括采用了计算存储分离的架 ...
- ChromePortable-Chrome便携化、绿化软件v2.0
ChromePortable-Chrome便携化.绿化软件v2.0-用户手册 By:ybmj@vip.163.com ,http://bbs.kafan.cn/thread-1806385-1-1.h ...
- 怎样在IDEA中使用JUnit4和JUnitGenerator V2.0自动生成测试模块
因为项目的需要,所以研究了一下自动生成测试代码.将经验记录下来,总会有用的.我个人认为,好记性不如多做笔记多反思总结. 1. 前提条件 开发环境已正确配置 工程已解决JUnit依赖关系(pom ...
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
随机推荐
- UVA 10594 Data Flow
无向图费用流 还有一段话摘自别人博客 这道题是无向图的最小费用最大流问题,看清楚是无向图的.这么说无向图和有向图的费用流问题有什么区别呢?主要是反向边的问题.首先我们说一下最大流问题中的反向边,我们需 ...
- Linux中断(interrupt)子系统之五:软件中断(softIRQ)【转】
转自:http://blog.csdn.net/droidphone/article/details/7518428 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 软件中 ...
- 删除 Myeclipse 遗留的 workspace
有时因需要而创建多个 workspace 并在它们之间切换,但是如果某些 workspace 内容被物理删除(不再需要)后,当你点击 File --> Switch Workspace 时,旧的 ...
- HihoCoder 1629 Graph (2017 ACM-ICPC 北京区域赛 C题,回滚莫队 + 启发式合并 + 可撤销并查集)
题目链接 2017 ACM-ICPC Beijing Regional Contest Problem C 题意 给定一个$n$个点$m$条边的无向图.现在有$q$个询问,每次询问格式为$[l, ...
- Static和Final修饰类属性变量及初始化
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那 ...
- mac下eclipse导入windows项目文件乱码
右键property->resource没有GBK,手工输入"GBK"项目正常. 一开始用windows被坑了,如果再用windows平台,第一时间将encoding改成UT ...
- Orchard FAQ
Orchard学习视频已登录百度传课: http://www.chuanke.com/3027295-124882.html 问:Orchard用VS重新生成后为什么那么大? 答:因为每个模块的bin ...
- IdHTTPServer(indy10)开发REST中间件
IdHTTPServer(indy10)开发REST中间件 浏览器通过“get”方式查询数据URL样例:http://127.0.0.1:7777/query?sql=select * from t1 ...
- Using ASIHTTPRequest in an iOS project
1) Add the files Copy the files you need to your project folder, and add them to your Xcode project. ...
- Android获取视频音频的时长的方法
android当中获取视频音频的时长,我列举了三种. 1:获取视频URI后获取cursor cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore ...