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

Does boost::asio support local in-memory connections?

本文关键字:内存 连接 支持 boost asio 是否      更新时间:2023-10-16

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

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

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

不,Asio对该功能没有一流的支持。

然而,Asio确实支持一些特定于平台的面向流的类型,这些类型与Asio的I/O操作(read()async_read()write()async_write()read_until()async_read_until()自由函数)配合使用:

  • local::stream_procol::socket使用UNIX域套接字(本地套接字)。这将提供与TCP套接字最接近的奇偶校验。程序可以通过BOOST_ASIO_HAS_LOCAL_SOCKETS宏测试其平台是否支持此功能。有关更多详细信息,请参阅UNIX域套接字概述。如果应用程序协议本质上是基于消息的,并且为了其可靠性而使用TCP,那么值得考虑在本地套接字上使用UDP,因为它们保证了可靠性
  • POSIX面向流的文件描述符:管道、标准输入和输出以及各种设备,但不是常规文件。程序可以通过BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR宏测试其平台是否支持此功能
  • Windows面向流句柄:命名管道。这需要使用I/O完成端口后端。程序可以通过BOOST_ASIO_HAS_WINDOWS_STREAM_HANDLE宏测试其平台是否支持此功能

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