ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。

ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等。

ACE_Message_QueueACE消息队列,请参考:

使用Message_Queue的经典的“有界缓冲区”的ACE实现

ACE_Message_BlockACE_Message_Block用于构建“固定”和“可变”长度的消息。ACE_Message_Block可以将多条消息连接在一起,形成一个链表,从而支持复合消息。请参考:

ACE_Message_Block消息数据类

ACE_Message_Block—–ACE消息的存储

ACE_Thread_ManagerACE线程管理类,请参考:

ACE_Thread_Manager(v3.12)

ACE日志设施请参考:

使用ACE日志设施(二)详细介绍(v4)

ACE组播通信请参考:

ACE组播通信,by NoName.

linux网络编程之一—–多播(组播)编程 ,by 胡永光.

问题参考ACE静态链接问题请参考

ACE的”error LNK2019: unresolved external symbol”链接错误

ACE的开发和使用 - FAQ

How to solve unresolved external symbol error - if_nametoindex in visual studio 2013

ACE TCP Server无法Open的问题最近突然发现ACE_SOCK_Acceptor.open方法报错,无法初始化,错误代码是10093,通过分析是WSAStartup()未初始化。最后在main函数文件中通过 #include 解决。解决原因是该文件中将调用 WSAStartup() 函数初始化。

12345ACE_INET_Addr commAddr(1500);if (m_acceptor->open(commAddr, 1) == -1) { ACE_DEBUG((LM_ERROR, "errno=%d", ACE_OS::last_error())); return -1;}

ACE 多网口多播问题当多播时存在多个网口,应指定多播绑定的网口。参考如下代码:

12345678910111213141516#include "ace/SOCK_Dgram_Mcast.h"#include "ace/Log_Msg.h"int main(){ ACE_SOCK_Dgram_Mcast mcast; ACE_INET_Addr srv_addr("224.0.0.9:520"); /* if (mcast.open(srv_addr, "eth0", 1) == -1) { ACE_ERROR_RETURN((LM_ERROR, "%p"), -1); }*/ mcast.join(srv_addr,1,"eth0");}

参考链接

ACE 示例2 — Echo Server,by peirenlei.

ACE自适配通信环境,by wikipedia.

服务器并发策略,by maodanp.

Threads and Connections in Backend Applications,by Hussein Nasser.

error LNK2019: 无法解析的外部符号 “int __cdecl ace_main_i(int,char * * const)” ,by 金士顿.

Windows Sockets Error Codes,by microsoft.

WSAStartup 函数 (winsock.h),by microsoft.

socket 函数 (winsock2.h),by microsoft.

ACE_SOCK,by 咚咚锵锵.

C++ Winsock 10093 error,by stackoverflow.

ACE_SOCK_Dgram_Mcast Class Reference,by vanderbilt.