在类UNIX系统中进程间通信使用更普遍的方法是普通的TCP还是UNIX Socket?

在linux中写了两个程序,一个基于QT,一个基于Python,各自有另外一方做不了(或不合适做)的任务。

然后两个进程需要互相发送数据进行通信。所以想到socket通信。但是选择TCP还是Unix Socket就犯了难。

本身服务器端是不需要外网通信的,所以初步选择了Unix Socket,但是常常因为对应的socket文件已经存在了,导致服务器启动不起来。但是用TCP的话,又会占用一个端口,并且不希望开放外部访问。

希望有做过类似东西的大神给指点一下这两种当时的正确用途都是什么?

阅读 3.8k
1 个回答

一般优先使用 UNIX domain socket。如果对应的 socket 文件已经存在就先删掉它。如果你要做单实例请使用 pidfile 和/或 flock 来处理。

如果你不考虑可移植性,可以考虑使用 abstract socket,就是跟 UNIX domain socket 一样但是只有名字没有文件的套接字,第一个字符为 NUL 即是。只有 Linux 支持。

如果是紧密相关的两个进程,可以使用管道或者 socketpair 来通信的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题