我正在使用asio构建一个可以通过TCP或unix套接字连接到远程系统的网络库。我使用asio::generic::stream_protocol::socket
它既有connect
方法,也有async_connect
方法。作为客户端连接到 unix 套接字时,使用async_connect
是否有意义?
定义"有意义"。这两种方式都有效,但对风格、架构和性能的影响不同。
数据输入/输出,特别是通过网络具有高延迟,即延迟,并导致整个模糊异步编程风格,boost asio甚至得名于此。
因此,在TCP情况下使用阻塞connect
将是一个非常糟糕的选择,因为整个线程要等待几毫秒,直到发生某些事情并且无法执行其他任何操作,而在IPC的情况下也可以,即unix套接字。
但是由于你想要两者兼而有之,我建议简单地使用async_connect
,因为无论如何你都必须以 TCP 情况的"异步"风格组织整个程序,并且它对 unix 套接字情况没有任何缺点(也可能比阻塞更快或具有更高的吞吐量)。并且不使不必要的分支成为特殊情况,许多人认为包括我在内的是有道理的。