C网络编程学习笔记ACE.docx

上传人:b****4 文档编号:3498400 上传时间:2022-11-23 格式:DOCX 页数:16 大小:1.85MB
下载 相关 举报
C网络编程学习笔记ACE.docx_第1页
第1页 / 共16页
C网络编程学习笔记ACE.docx_第2页
第2页 / 共16页
C网络编程学习笔记ACE.docx_第3页
第3页 / 共16页
C网络编程学习笔记ACE.docx_第4页
第4页 / 共16页
C网络编程学习笔记ACE.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C网络编程学习笔记ACE.docx

《C网络编程学习笔记ACE.docx》由会员分享,可在线阅读,更多相关《C网络编程学习笔记ACE.docx(16页珍藏版)》请在冰豆网上搜索。

C网络编程学习笔记ACE.docx

C网络编程学习笔记ACE

前言

面向对象中间件体系结构

a)主机基础设施中间件:

封装socket,线程等不同主机的实现,形成统一的接口。

如java,ACE

b)分布式中间件:

连接管理,内存管理,整编,解编,端点和请求的多路分离,同步,多线程等,使程序员象开发独立应用程序一样开发分布式应用程序。

分布式中间件的核心是ORB(ObjectRequestsBroker对象请求代理),如:

COM+,JAVARMI,CORBA

1通信设计空间

1.1面向连接协议

需要做出如下设计:

●数据成帧策略

●连接多路复用策略

1.链接多路复用:

多个线程复用同一个TCP链接

2.非多路复用:

多个进程使用多个链接。

系统开销大

1.2同步和异步消息交换

1.3消息传递与共享内存

消息传递:

消息中间件

共享内存:

●本地共享内存:

shmget(),shmat().内存映射文件

●分布式共享内存:

虚拟内存,是本地共享内存的一种抽象。

2SOCKETAPI概述

3ACESocketwrapperfaçade

3.1ACE_Addr

运算符==,!

=

addr_type,addr_size

3.2ACE_INET_Add

3.3ACE_IPC_SAP

为其他ACE对象提供了基本的“I/O”句柄操作能力

enable()

disable()

get_handle()

set_handle()

3.4ACE_SOCK

继承自ACE_IPC_SAP,

get_local_addr()

set_local_addr()

open()

close()

get_remote_addr()

set_option()

get_option()

3.5ACE_SOCK_Connecter

主动连接模式,是一个工厂类。

发起一个连接,并在连接成功后初始化一个ACE_SOCK_Stream对象。

可以通过“阻塞”“非阻塞”“定时”方式发起。

以下是非阻塞模式

以下是非阻塞模式

3.6ACE_SOCK_Stream

数据传输角色的实现。

Send()

Recv()

Send_n()

Recv_n()

Recvv_n()//使用分散读取系统函数,高效、完整读取多个缓冲区,参数iovec[]

Sendv_n()//使用集中写入系统函数,高效、完整写入多个缓冲区

Enable(ACE_NOBLOCK)

3.7ACE_SOCK_Acceptor

被动连接模式的实现。

相当于accept()

是一个工厂类,初始化一个ACE_SOCK_Stream

Open()

Accept()

3.8ACE_Mem_Map

通过内存映射文件机制,将文件映射到内存中,以便及时读取,提高了效率。

此外,内存映射文件还可以被多个进程共享。

4网络日志服务程序的实现

4.1ACE_Message_Block

标准的消息管理包括:

1)收到消息后,保存到缓冲区

2)添加和删除消息的头和尾

3)将消息分段,或重新组装,以适应网络的最大传输单元MCU

4)将消息保存到缓冲区中,以进行传输

5)对“未按顺序”接收的消息进行记录

ACE_Message_Block实现了composite模式。

避免频繁的内存复制操作。

提高效率。

注:

也可以用ACE:

:

write_n(ACE_STDOUT,head)一次性写入

4.2ACE_InputCDR与ACE_OutputCDR

功能:

整编,解编。

避免不同操作系统对数据类型(如int)的不同实现方法。

ACE_OutputCDRheader(ACE_CDR:

:

MAX_ALIGNMENT+userlength)

ACE_OutputCDR:

:

from_boolean(ACE_CDR_BYTE_ORDER)

5并发设计空间

服务器可以分为循环式、并发式和反应式等几大类。

6操作系统的并发机制

7ACE同步事件多路分离

7.1ACE_Handle_Set

7.2ACE_Handle_Set_Iterator

7.3ACE:

:

select()

Set_bit()//将一个句柄放置在set中

领悟到的:

Logging_handler是一个工具对象。

使用他时,先设置一个handle,然后再进行操作。

就像螺丝刀一样。

先指定给一个人,然后这个人才可以操作。

采用ACE_Hash_Map将socket句柄与log_file句柄关联在一起。

从而实现根据socket句柄写相应log_file的功能。

8ACE进程WrapperFaçade

ACE_OS:

:

getenv(“fafaff”)获得环境变量

ACE_Process_Optionsopt;

Omand_line(“%s%d”,”hhafaf”,20);

ACE_Processchild;

Child.spawn(opt);

Child.wait();

Child.exit_code();

9ACE线程WrapperFaçade

9.1ACE_Thread_Manager

创建,管理线程

ACE_Thread_Manager.instance()->spawn()

在执行线程时,为线程动态分配一个属于自己的对象,将对象传递给线程,线程结束时,由线程自身删除这个对象。

ACE_Thread_tme=ACE_OS.thr_self();

ACE_Thread_Manager.instance()->testCancle(me)==false协同式删除

ACE_Thread_Manager.instance()->cancle_all()协同删除由ACE_Thread_Manager创建的所有线程。

可以调用wait()等待。

9.2ACE_Sched_Params

设置线程属性,如优先级,调度策略等

9.3ACE_TSS

实现了“线程专有存储代理”,实现一个每个线程专有的对象。

但这个对象看上去好像是一个全局变量。

比如错误码,所有的线程都需要一个属于自己的错误码。

->操作符,得到和TSS键相关联的线程专有对象

Cleanup()线程结束时,删除TSS对象

在线程内部:

10ACE同步wrapperfaçade

消息队列中信号量的使用:

多个生产者,多个消费者。

刚开始:

notfull=0,notempty=0.不满,也不空。

生产者流程:

Notfull+1。

Notempty-1

消费者流程:

Notempty+1

Notfull-1

卷二

11ACE_Service_Configurator框架

12ACE_Message_Queue

12.1初始化和流控制方法

●Open()初始化队列,设置水位标,设置通知策略

●Hight_warter_mark(),Low_warter_mark()设置/获取流控制何时开始和结束的高低水位标

●Notification_strategy()设置,获取通知策略

12.2入队出对方法和消息缓冲

●Is_empty()

●Is_full()

●Enqueue_head()

●Enqueue_tail()

●Dequeue_head()

●Dequeue_tail()

●Enqueue_prio()根据其优先级来插入队列

13ACE_Task

14Acceptor-Connector框架

14.1ACE_Svc_Handler

继承自ACE_Task,而ACE_Task又继承自ACE_Event_Handler

注意:

close()方法是由每个线程都进行调用的。

该类使用起来非常简单,因为他实现了Task框架和ACE_Event_Handle

14.2ACE_Acceptor类

14.3ACE_Connector类

14.4ACE_Proactor框架

14.5ACE_Proactor类

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1