【发布时间】:2020-11-16 04:31:41
【问题描述】:
我有两个需要通信的独立程序:一个 PHP 程序和一个 Java 守护程序。 PHP 程序将命令写入日志文件。 Java 守护进程读取它们、执行它们并清除日志。
这大约有 2/3 的时间有效。
我认为问题在于 PHP 有时正在编写命令,而 Java 守护进程正在读取或执行命令。这意味着当它进入清除命令的阶段时,它会从 PHP 中删除新命令,而不会执行它们。
是否有更合理的方式来构建事物,以确保来自 PHP 的新命令不会与旧命令一起被删除?
【问题讨论】:
-
不在文件系统级别和所有操作系统上。可以做的是让每个进程创建一个
.lock文件以向另一个进程发出信号“嘿,我正在处理文件,不要碰它”,并在进程完成后将其删除。在访问文件之前,每个进程都必须检查.lock文件是否存在并等待它不存在。 -
有道理,谢谢你的想法!
-
取决于您的操作系统。互斥锁、信号量或读写器锁是合适的——如果您有跨进程同步对象的操作系统(和语言支持)。 linux.die.net/man/7/sem_overview
-
我认为最好的方法是不使用文件系统来发送命令。您可以考虑使用套接字或 http 服务器直接向 java 守护程序发送命令。