- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
前言
面向对象中间件体系结构
主机基础设施中间件:封装socket,线程等不同主机的实现,形成统一的接口。如java,ACE
分布式中间件:连接管理,内存管理,整编,解编,端点和请求的多路分离,同步,多线程等,使程序员象开发独立应用程序一样开发分布式应用程序。分布式中间件的核心是ORB(Object Requests Broker对象请求代理),如:COM+,JAVA RMI,CORBA
通信设计空间
面向连接协议
需要做出如下设计:
数据成帧策略
连接多路复用策略
链接多路复用:多个线程复用同一个TCP链接
非多路复用:多个进程使用多个链接。系统开销大
同步和异步消息交换
消息传递与共享内存
消息传递:消息中间件
共享内存:
本地共享内存:shmget(),shmat(). 内存映射文件
分布式共享内存:虚拟内存,是本地共享内存的一种抽象。
SOCKET API 概述
ACE Socket wrapper fa?ade
ACE_Addr
运算符 == , !=
addr_type, addr_size
ACE_INET_Add
ACE_IPC_SAP
为其他ACE对象提供了基本的“I/O”句柄操作能力
enable()
disable()
get_handle()
set_handle()
ACE_SOCK
继承自ACE_IPC_SAP,
get _local_addr()
set_local_addr()
open()
close()
get_remote_addr()
set_option()
get_option()
ACE_SOCK_Connecter
主动连接模式,是一个工厂类。发起一个连接,并在连接成功后初始化一个ACE_SOCK_Stream对象。
可以通过“阻塞”“非阻塞”“定时”方式发起。
以下是非阻塞模式
以下是非阻塞模式
ACE_SOCK_Stream
数据传输角色的实现。
Send()
Recv()
Send_n()
Recv_n()
Recvv_n() //使用分散读取系统函数,高效、完整读取多个缓冲区,参数 iovec[]
Sendv_n() //使用集中写入系统函数,高效、完整写入多个缓冲区
Enable(ACE_NOBLOCK)
ACE_SOCK_Acceptor
被动连接模式的实现。相当于accept()
是一个工厂类,初始化一个ACE_SOCK_Stream
Open()
Accept()
ACE_Mem_Map
通过内存映射文件机制,将文件映射到内存中,以便及时读取,提高了效率。此外,内存映射文件还可以被多个进程共享。
网络日志服务程序的实现
ACE_Message_Block
标准的消息管理包括:
收到消息后,保存到缓冲区
添加和删除消息的头和尾
将消息分段,或重新组装,以适应网络的最大传输单元MCU
将消息保存到缓冲区中,以进行传输
对“未按顺序”接收的消息进行记录
ACE_Message_Block实现了composite模式。避免频繁的内存复制操作。提高效率。
注:也可以用ACE::write_n(ACE_STDOUT,head)一次性写入
ACE_InputCDR与ACE_OutputCDR
功能:整编,解编。避免不同操作系统对数据类型(如int)的不同实现方法。
ACE_OutputCDR header(ACE_CDR::MAX_ALIGNMENT+userlength)
ACE_OutputCDR::from_boolean(ACE_CDR_BYTE_ORDER)
并发设计空间
服务器可以分为循环式、并发式和反应式等几大类。
操作系统的并发机制
ACE同步事件多路分离
ACE_Handle_Set
ACE_Handle_Set_Iterator
ACE::select( )
Set_bit() //将一个句柄放置在set中
领悟到的:
Logging_handler 是一个工具对象。使用他时,先设置一个handle,然后再进行操作。就像螺丝刀一样。先指定给一个人,然后这个人才可以操作。
采用ACE_Hash_Map将socket句柄与log_file句柄关联在一起。从而实现根据socket句柄写相应log_file的功能。
ACE进程Wrapper Fa?ade
ACE_OS::getenv(“fafaff”) 获得环境变量
ACE_Process_Options opt;
Omand_line(“%s %d”,”hhafaf”,20);
ACE_Process child;
Child.spawn(opt);
Child.wait();
Child.exit_code();
ACE线程Wrapper Fa?ade
ACE_Thread_Manager
创建
您可能关注的文档
最近下载
- 全过程造价咨询投资控制目标承诺及保证措施.pdf VIP
- 牛津深圳版五上Unit 9 Around the city 第二课时课件.pptx
- 信息安全数学基础(第二版)裴定一课后习题答案.pdf
- 光电信息科学与工程专业的职业生涯规划 (修正).pptx VIP
- 2022年11月中日友好医院2022年应届毕业生公开招聘(一)笔试参考题库+答案详解.docx
- 三维激光扫描仪使用手册faro scene lt.pdf
- 名著阅读《西游记》练习试题(含答案).pdf VIP
- 华为H12-891 V1.0 HCIE-Datacom认证考试题库资料大全-下(多选、判断题汇总).pdf
- 医学电子书包考试找答案.pdf
- 物业起诉业主不交物业费官司超完美答辩状.doc
文档评论(0)