我正在考虑创建一个具有可选独立操作模式的服务器/客户端应用程序。
在这种独立模式下,它不会创建真正的 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/