boost :: asio是否支持本地内存连接?

时间:2015-12-02 12:50:41

标签: c++ boost boost-asio

我正考虑使用可选的独立操作模式创建服务器/客户端应用程序。

在这种独立模式下,它不会创建一个真正的TCP服务器/客户端,只需要2个线程,使用内存缓冲区相互通信。

基于ASIO文档,我确定可以使用通用流协议和自定义协议实现来实现,但是有更简单或已经存在的方法吗?

1 个答案:

答案 0 :(得分:3)

不,Asio没有这项功能的一流支持。

但是,Asio确实支持一些与Asio的I / O操作一起使用的特定于平台的流类型(read()async_read()write()async_write(),{{1 }}和read_until()自由函数):

  • local::stream_protocol::socket使用UNIX域套接字(本地套接字)。这些将提供与TCP套接字最接近的奇偶校验。程序可以通过async_read_until()宏测试其平台是否支持此功能。有关详细信息,请参阅UNIX Domain Sockets概述。如果应用程序协议本质上是基于消息的并且使用TCP来确保其可靠性,则可以考虑在本地套接字上使用UDP,因为它们可以保证可靠性。
  • POSIX Stream-Oriented File Descriptors:管道,标准输入和输出以及各种设备,但不是常规文件。程序可以通过BOOST_ASIO_HAS_LOCAL_SOCKETS宏测试其平台是否支持此功能。
  • Windows Stream-Oriented HANDLEs:命名管道。这需要使用I / O完成端口后端。程序可以通过BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR宏测试其平台是否支持此功能。

请注意,这些通常用于进程间通信,因此可以由其他程序在本地访问。