使用流程实施 "live communication" 的最惯用方法是什么?

What's the most idiomatic way to implement "live communication" with a process?

我有一个程序在后台运行,无需任何干预。

但是,我想提供对 运行 个实例的一些控制。用法可能看起来像这样:

$ foo start
# an instance starts running in the background
$ foo refresh bar,baz
# the running instance does something with bar and baz

实现这样的东西的典型方法是什么?有没有办法以某种方式在实例之间共享通道?我如何首先 找到 现有实例?

一个典型的方法是使用客户端-服务器方法。

foo start 可以启动服务器。 从 macOS shell:

将其作为守护进程在后台启动
pkill foo && nohup foo start > out.log 2>&1 &

或简单地(在某些情况下可能就足够了):

foo start &

在 Linux 上,它可以配置为系统服务、初始化脚本或 cron 作业。

foo refresh 可以是向 运行 守护程序实例发送请求的客户端。

如果您只需要单向通信,一种典型的方法是使用 HTTP(例如,对客户端使用 warp for the server and reqwest)。在这种情况下,定位 运行 实例的方法是定义一个常量共享端口号,例如12345。然后服务器可以监听“localhost:12345”,客户端可以请求“http://localhost:12345/refresh?ids=bar,baz”。

如果您不想要库的开销,并且您的通信协议像您描述的那样简单,那么最简单的方法就是使用共享文件。在这种情况下,定位 运行 实例的方法是定义一个常量共享文件名,例如“/var/run/foo/request.txt”。然后客户端向该文件写入一行“refresh bar,baz”,服务器检测到更改,读取它并执行某些操作(可能将响应输出到同一文件或其他共享文件)。