2015-12-02 93 views
1

我正在考虑使用可选的独立操作模式创建服务器/客户端应用程序。boost :: asio是否支持本地内存连接?

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

基于ASIO文档,我确定它可以通过使用通用流协议和自定义协议实现来实现,但是有没有更容易实现的方法?

+0

它可能是最快的只是将您的服务器地址绑定到本地主机。它几乎肯定会工作,并且足够快。 –

+0

我不确定速度,但它肯定不是性能问题。我只是很好奇,如果有一个简单的解决方案,但也有两个实际的,但我想到的边缘原因:偏执的防火墙规则阻止本地主机连接,并测试网络代码没有涉及外部因素 – Dutow

+0

下一个最简单的是使用系统管道,并有代码实现ASIO易于通过谷歌提供的管道传输。请注意,Windows上的管道有重大陷阱,它们在足够的刺激下工作得很好,但期望大量的调试工作以使它们运行良好。即避免如果您只能使用本地主机。 –

回答

3

不,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概述。如果应用协议基本上是基于消息的,并且使用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宏来测试它们的平台是否支持这个功能。

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

+0

每次我考虑支持独立模式时,我都会在其引入的技术债务上减轻运营收益(I/O吞吐量,不一定是应用程序吞吐量)。 –