在linux中写了两个程序,一个基于QT,一个基于Python,各自有另外一方做不了(或不合适做)的任务。
然后两个进程需要互相发送数据进行通信。所以想到socket通信。但是选择TCP还是Unix Socket就犯了难。
本身服务器端是不需要外网通信的,所以初步选择了Unix Socket,但是常常因为对应的socket文件已经存在了,导致服务器启动不起来。但是用TCP的话,又会占用一个端口,并且不希望开放外部访问。
希望有做过类似东西的大神给指点一下这两种当时的正确用途都是什么?
在linux中写了两个程序,一个基于QT,一个基于Python,各自有另外一方做不了(或不合适做)的任务。
然后两个进程需要互相发送数据进行通信。所以想到socket通信。但是选择TCP还是Unix Socket就犯了难。
本身服务器端是不需要外网通信的,所以初步选择了Unix Socket,但是常常因为对应的socket文件已经存在了,导致服务器启动不起来。但是用TCP的话,又会占用一个端口,并且不希望开放外部访问。
希望有做过类似东西的大神给指点一下这两种当时的正确用途都是什么?
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答802 阅读✓ 已解决
2 回答3.2k 阅读
一般优先使用 UNIX domain socket。如果对应的 socket 文件已经存在就先删掉它。如果你要做单实例请使用 pidfile 和/或 flock 来处理。
如果你不考虑可移植性,可以考虑使用 abstract socket,就是跟 UNIX domain socket 一样但是只有名字没有文件的套接字,第一个字符为 NUL 即是。只有 Linux 支持。
如果是紧密相关的两个进程,可以使用管道或者 socketpair 来通信的。