与需要在后台跟踪某些内部状态的rust库交互的最方便方式是什么?
例如,我有以下程序:
use tokio::io::AsyncBufReadExt;
#[tokio::main]
async fn main() {
let mut state = 0;
let mut reader = tokio::io::BufReader::new(tokio::io::stdin());
loop {
let mut buffer = Vec::new();
reader.read_until(b'\n', &mut buffer).await.unwrap();
let cmd = std::str::from_utf8(&buffer).unwrap();
match cmd {
"get-count\n" => {
println!("{}", state);
state += 1;
}
_ => {
}
}
}
}
字符串
我可以使用Linux bash通过以下方式与之交互:
cargo run
get-count
0
get-count
1
another-command
get-count
2
型
但是,这会创建一个阻塞进程,并且在与库交互时,我需要使用来自其他bash命令的输入。
我的目标是将其作为守护进程运行,这样我就可以使用bash以以下方式与它交互:
>> ./start-service
>> ./service-cli get-count
0
>> ./service-cli get-count
1
>> COUNT=$(./service-cli get-count)
>> echo $COUNT
2
型
在使用Linux时,最佳实践是什么?有没有使用systemd执行类似操作的示例?
1条答案
按热度按时间axr492tv1#
您可以使用
coproc
执行所需的命令,并通过管道文件描述符连接命令的标准输出和标准输入。字符串
然后
型
和
型