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

标签 c++ boost boost-asio

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

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

根据 ASIO 文档,我确信它可以使用通用流协议(protocol)和自定义协议(protocol)实现来实现,但是是否有更简单或已经存在的方法来实现这一点?

最佳答案

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

但是,Asio 确实支持一些平台特定的面向流的类型,这些类型与 Asio 的 I/O 操作一起工作(read()async_read()write( )async_write()read_until()async_read_until() 自由函数:

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

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

关于c++ - boost::asio 是否支持本地内存连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34043229/

相关文章:

c++ - 自动获取某段代码的浮点运算次数

c++ - QT 布局小部件调整大小

c++ - 有没有办法并行化下三角矩阵求解器?

c++ - 这个 boost::lambda 使用有什么问题?

c++ - 使用 Boost Asio 套接字为双端队列调用移动构造函数时出现问题

c++ - winapi - 日期时间选择器,更改上一个/下一个按钮的大小

c++ - 使用 shared_ptr boost 序列化而不在指向类中实现 serialize() 函数

boost - 在 R 包中将 C++ 与 boost 联系起来

c++ - 如何获取异步读取时传输的字节数boost asio c++

c++ - Boost 库中的网络是如何实现的