最近看到一个GO语言和PHP结合的开发框架 Goridge 其中有这么一段代码,3种不同的通信方案

$tcpRPC = Goridge\Relay::create('tcp://127.0.0.1:6001');
$unixRPC = Goridge\Relay::create('unix:///tmp/rpc.sock');
$streamRPC = Goridge\Relay::create('pipes://stdin:stdout');

对这3种通信方案的区别做一下记录

  • UNIX Socket是同一台服务器上不同进程间的通信机制。TCP/IP Socket是网络上不同服务器之间进程的通信机制,也可以让同一服务器的不同进程通信。
  • Postgres的一位核心开发者曾经做过实验,证明UNIX Socket的方式比TCP/IP Socket方式要快31%,所以,在同一个服务器上应该优先选择UNIX Socket方式。
  • 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传,其本质是一个伪文件(实为内核缓冲区),所以在这3中通信方案中,速度是最快的
  • 按照速度排序是 pipes > unix > tcp
  • 按照通信范围是 tcp > unix > pipes