基于ACE的服务定位器(图失效)
l 并发和同步:ACE的适配层封装了用于多线程、多进程和同步的OS API。
l 进程间通信(IPC)和共享内存:ACE的适配层封装了用于本地和远地IPC、以及共享内存的OS API。
l 事件多路分离机制:ACE的适配层封装了用于对基于I/O、定时器、信号和同步的事件进行同步和异步多路分离的OS API。
l 显式动态链接:ACE的适配层封装了用于显式动态链接的OS API。显式动态链接允许在安装时或运行时对应用服务进行配置。
l 文件系统机制:ACE的适配层封装了用于操作文件和目录的OS文件系统API。
l 并发和同步组件:ACE对像互斥体和信号量这样的本地OS多线程和多进程机制进行抽象,以创建高级的OO并发抽象,像主动对象(Active Object)和多态期货(Polymorphic Future)。
l IPC和文件系统组件:ACE C++包装对本地和/或远地IPC机制进行封装,比如socket、TLI、UNIX FIFO和STREAM管道,以及Win32命名管道。此外,ACE C++包装还封装了OS文件系统API。
l 内存管理组件:ACE内存管理组件为管理进程间共享内存和进程内堆内存的动态分配和释放提供了灵活和可扩展的抽象。
l 事件多路分离组件:ACE Reactor(反应堆)和Proactor(前摄器)是可扩展的面向对象多路分离器,它们分派应用特有的处理器,以响应多种类型的基于I/O、定时器、信号和同步的事件。
l 服务初始化组件:ACE Acceptor(接受器)和Connector(连接器)组件分别使主动和被动的初始化任务与初始化一旦完成后通信服务所执行的应用特有的任务去耦合。
l 服务配置组件:ACE Service Configurator(服务配置器)支持应用的配置,这些应用的服务可在安装时和/或运行时动态装配。
l 分层的流组件:ACE Stream组件简化了像用户级协议栈这样的由分层服务组成的通信软件应用的开发。
l ORB适配器组件:通过ORB适配器,ACE可以与单线程和多线程CORBA实现进行无缝集成。
1、当一个新客户需要获取服务名对应的服务器信息时,首先向服务器注册客户信息,获得一个SessionID,并在定位服务器上注册自己的信息(IP,证书,SessionID等)。
ACE Acceptor-Connector框架用来发送和接收消息,使用ACE Acceptor-Connector框架构成服务定位器的通讯框架。
发送消息
|
接收消息
|
下图显示了这两个框架在系统中的作用、以及它们如何合作:一、 他提供了一个被动模式的IPC端点,用于侦听和接受来自对端的连接。这个IPC端点的类型可以通过ACE的许多IPC wrapper façade类来参数化,从而使较低级的连接机制与应用级服务初始化策略分离开来。
二、 他使“被动地连接IPC端点、创建/激活与其他相关联的服务处理器”所必需的各步骤得以自动化。
方法
|
描述
|
ACE_Acceptor()
open()
|
将接受器的被动模式IPC端点绑定到特定地址,比如TCP端口号和IPC主机地址,然后对连接请求的到达进行侦听。
|
~ACE_Acceptor()
close()
|
关闭接受器的IPC端点,并释放其资源。
|
acceptor()
|
返回指向底层PEER_ACCEPTOR的引用。
|
方法
|
描述
|
handle_input()
|
当连接请求从对端连接器到达时,反应器会调用该模板方法。它可以使用在下面概述的3个方法来使“被动地连接IPC端点并创建与其相关联的服务处理器”所必需的各步骤自动化
|
make_svc_handler()
|
这个工厂方法创建服务处理器来处理通其已连接的IPC端点、从对端服务发出的数据请求
|
accept_svc_handler()
|
这个挂钩方法是用接受器的被动模式IPC端点来创建已连接的IPC端点,并将此端点与和服务处理器相关联的一个I/O句柄封装在一起
|
active_svc_handler()
|
这个挂钩方法调用服务处理器的open()挂钩方法,让服务处理器完成对自己的初始化
|
class Acceptor : public ACE_Acceptor<ClientHandler, ACE_SOCK_ACCEPTOR>
virtual int open (const ACE_SOCK_ACCEPTOR::PEER_ADDR &local_addr,
ACE_Reactor *reactor = ACE_Reactor::instance (),
int flags = 0,
int use_select = 1,
int reuse_addr = 1);
virtual int make_svc_handler (ClientHandler *&sh);
virtual int accept_svc_handler (ClientHandler *sh);
一、 它提供了一个IPC工厂,可以同步地或反应式地主动与对端接受器建立连接。可以通过ACE的许多IPC wrapper façade类来参数化这个IPC端点的类型,从而将较低级的连接机制与应用级服务初始化策略分离开来。
二、 它使“主动连接IPC端点、以及创建并激活与其相关联的服务处理器所必需的各步骤”得以自动化。
方法
|
描述
|
ACE_Connector ()
open()
|
用于初始化接受器的方法。
|
~ACE_Connector ()
close()
|
释放其资源。
|
Connector ()
|
返回指向底层PEER_ACCEPTOR的引用。
|
方法
|
描述
|
connect()
|
应用会在想要将某个服务处理器连接到在侦听的对端时,调用这个模板方法。它可以使用下面的3个方法来使“主动连接某个IPC端点,创建并激活与其相关联的服务处理器”所必需的各步骤自动化
|
make_svc_handler()
|
这个工厂方法创建服务处理器,后者会使用已连接的IPC端点
|
connect_svc_handler()
|
这个挂钩方法使用服务器的IPC端点来同步或异步地主动连接端点
|
active_svc_handler()
|
这个挂钩方法调用服务处理器的open()挂钩方法,后者允许服务处理器在连接建立之后完成对其自身的初始化
|
handle_output()
|
在异步发起的连接请求完成之后,反应器会调用这个模板方法。它调用active_svc_handler()方法,以让服务处理器对其自身进行初始化
|
cancel()
|
取消某个服务处理器,其连接之前是被异步发起的。调用者(不是连接器)负责关闭服务处理器
|
template<class Message_Handler>
class PS_Connector : public ACE_Connector<Message_Handler, ACE_SOCK_CONNECTOR>
class testConnector : public PS_Connector<ClientHandler>
int PS_Connector<Message_Handler>::open (ACE_Reactor *r,int flags)
template<class Message_Handler>
int PS_Connector<Message_Handler>::make_svc_handler (Message_Handler *&sh)
template<class Message_Handler>
int PS_Connector<Message_Handler>::connect_svc_handler (Message_Handler *&svc_handler,
const ACE_SOCK_CONNECTOR::PEER_ADDR &remote_addr,
ACE_Time_Value *timeout,
const ACE_SOCK_CONNECTOR::PEER_ADDR &local_addr,
int reuse_addr,
int flags,
int perms)
方法
|
描述
|
newSession()
|
新会话
|
getSession()
|
获取指定会话的值
|
isActiveSession()
|
判断指定会话是否正在使用中
|
updateSession()
|
更新某会话的值
|
removeSession()
|
删除某会话
|
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
文件名
|
描述
|
privkey_server.pem
|
服务端的私钥文件
|
cacert_server.pem
|
服务端的证书文件
|
privkey.pem
|
客户端的私钥文件
|
cacert.pem
|
客户端的证书文件
|
消息处理模块
|
头模块
|
成员名
|
格式
|
描述
|
totalLength
|
ACE_CDR::ULong
|
数据长度
|
type
|
ACE_CDR::UShort
|
命令类别
|
subtype
|
ACE_CDR::UShort
|
命令子类别
|
LENGTH
|
ACE_CDR::ULong
|
消息长度
|
类名
|
type值
|
subtype值
|
cs_ServiceListRequest
|
11
|
1
|
sc_ServiceListResponse
|
12
|
1
|
cs_ServiceRequest
|
11
|
2
|
sc_BadRequest1
|
12
|
2
|
sc_BadRequest2
|
12
|
3
|
sc_GoodRequest
|
12
|
3
|
cs_Register2Service
|
12
|
4
|
|
三、cs_Register2Service的处理
bool operator == (const UUID & r) const
return 0 ==::memcmp(this,&r,sizeof(UUID));
[1] (美)Douglas C. Schmidt著 於春景 译:C++网络编程 卷一,华中科技大学出版社,2003年12月
[2] (美)Douglas C. Schmidt 著 马维达 译:C++网络编程 卷二,电子工业出版社,2004年1月
[3] (美) Douglas C. Schmidt 著: C++NPv1幻灯片,www.dre.vanderbilt.edu/~schmidt/
[4] (美) Douglas C. Schmidt 著: C++NPv2幻灯片,www.dre.vanderbilt.edu/~schmidt/
[4] (美)Douglas C. Schmidt著 马维达 译:ACE自适配通信环境中文技术文档
[5] (美)Douglas C. Schmidt 著:ACE Software Development Guidelines,
[10] (美)James Rumbaugh,The UML Reference Manual,Addsion-Wesley,1999年
基于ACE的服务定位器(图失效)相关推荐
- java网络编程作业基于UDP简单聊天窗口,图形化界面,包含客户端和服务端
//郑州轻工业大学 //题号:实验四 第二题 //题目:使用基于UDP的网络编程方法,完成客户端和服务器间的聊天功能.要求图形界面. java网络编程作业 基于UDP简单聊天窗口,图形化界面,包含客户 ...
- 数据驱动应用(三):异构数据服务(基于有向无环图DAG)
概述 主要概念 数据服务(Data Service):对异构数据源,基于有向无环图,提供异构数据的查询和推送能力. 指标:用于衡量事物发展程度的单位或方法,它还有个IT上常用的名字,也就是度量.例如: ...
- 基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结
Reactor与 Proactor 基本概念 在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O ...
- 基于位置的服务器,用于基于位置的服务的移动台-服务器协议
具体实施方式 以下将结合示例性无线通信系统和相关联的基于位置的服务来示出本发明.然而,应当理解,本发明不限于与任何特定类型的无线系统或者基于位置的服务结合使用.公开的技术适于与各种其他系统结合使用,并 ...
- php service locator,Yii源码解读-服务定位器(ServiceLocator)
SL的目的也是解耦,并且非常适合基于服务和组件的应用. Service Locator充当了一个运行时的链接器的角色,可以在运行时动态地修改一个类所要选用的服务, 而不必对类作任何的修改. 一个类可以 ...
- NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...
原文:NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成 本篇内容属于非实用性(拿来即用)介绍,如对框架设计没兴趣的朋友,请略过. 快一个月没有写博 ...
- ①Windows Server 8基于远程桌面服务方案的安装
今天呢,我正式开始给大家介绍一同分享Windows Server 8的远程桌面服务有什么新的变化和内容了,虽然目前是Beta版,但我觉得大的方向和内容应该变化不到哪去了,同时Windows Serve ...
- TCP/IP网络编程之基于TCP的服务端/客户端(二)
回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...
- 分布式面试 - 如何基于 dubbo 进行服务治理、服务降级、失败重试以及超时重试?
分布式面试 - 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试题 如何基于 dubbo 进行服务治理.服务降级.失败重试以及超时重试? 面试官心理分析 服务治理,这个问题如 ...
最新文章
- (C++)从字符串中取出整形、浮点型和字符串
- rethat linux安装nginx,RedHat和CentOS下Nginx安装
- 谷歌浏览器扩展程序XDM_请立即更新您的谷歌Chrome浏览器 获取重要的安全补丁程序...
- 构建LAMP平台(一)(软件版本:httpd-2.4.16,php-5.6.12,mysql-5.6.26)
- java中奇偶数的判断
- leetcode76. 最小覆盖子串
- oracle暂停索引,Oracle索引被抑制情况
- unordered_map 简介
- 2019中国旅游与酒店风云榜酒店业榜单公布
- Linux平台Libyuv使用指南
- H.266/VVC相关技术学习笔记3:帧内色度预测模式中的DM模式及其在N次会议上相关的提案总结
- 我的【藏羚头条】开发运营经验
- web前端学习(一):国内最常用,又优秀的web框架,Vue渐近式框架
- matlab收获,matlab实习心得体会 1700字
- 深耕技术,与实践赛跑:一文告诉你如何稳妥快速完善区块链技术并有序推动商用​?...
- 音乐原唱伴唱卡拉ok模式解决!
- SLAM十四讲 ch4 Sophus库安装避雷和使用
- 怎么在计算机网络广播中发话,如何用电脑发网络传真?手把手教大家具体操作步骤...
- 英语面试中五大典型问题及其回答技巧
- 在Linux直接运行安卓程序