我要求服务器需要与2个客户端进行交互,其中一个客户端位于本地计算机上,另一个位于远程服务器上。
所以,最初我考虑使用AF_UNIX创建一个套接字来与本地客户端进行通信(因为它比AF_INET更快),并且在与远程通信时进行AF_INET,并在它们之间进行轮询。
但是对于本地客户端,通道只会在开始时创建,它将永久存在,直到服务器运行,即单次接受,然后是多次读/写。
那么,我可以用AF_INET替换这个AF_UNIX,因为连接建立只会进行一次吗? 在AF_INET的情况下性能如何?它是三方握手还是其他地方?
答案 0 :(得分:1)
引自Performance: TCP loopback connection vs Unix Domain Socket:
当服务器和客户端基准程序在同一个盒子上运行时,可以使用TCP / IP环回和unix域套接字。根据平台的不同,unix域套接字可以比TCP / IP环回(例如在Linux上)实现大约50%的吞吐量。 redis-benchmark的默认行为是使用TCP / IP环回。
但是,请确保性能增益值得使应用程序的网络堆栈复杂化(通过使用各种类型的套接字,具体取决于客户端位置)。