Nie ma jednej błogosławiony sposób zrobić komunikacja międzyprocesowa w Rust. Będziesz musiał użyć dowolnej technologii: rur, gołych gniazd (TCP lub UDP), pamięci współdzielonej, nanomsg/ZeroMQ, cokolwiek.
Również Send
nie oznacza, że można serializować obiekt typu, który go implementuje i wysyła do innego procesu. Oznacza to, że dane mogą być bezpiecznie wysyłane do innego wątku wątku (np. Nie zawiera żadnych odniesień do stosu wątku źródłowego) i nie jest związane z serializacją.
Na przykład jedną z podstawowych form IPC są stdin/stdout między procesami nadrzędnymi i podrzędnymi. Process
API pozwala na wysyłanie i odbieranie danych za pomocą tych rur:
use std::io::process::Command;
fn main() {
let mut p = Command::new("tr").arg("a-z").arg("A-Z").spawn().unwrap();
{
let mut p_stdin = p.stdin.as_mut().unwrap();
p_stdin.write_str("hello world").unwrap();
}
p.wait().unwrap().success();
let response = p.stdout.as_mut().unwrap().read_to_string().unwrap();
println!("Responded: {}", response);
}
Albo można użyć gniazda, ale przykładem może być dość duża. Możesz znaleźć dokumentację API gniazd here.
Dostępne są gniazda TCP i UDP, co w mojej głowie pozwala na komunikację między procesami. Czy masz na myśli konkretny typ IPC? Może istnieje coś, z czym chcesz współpracować? Czy są jakieś przykłady IPC, które masz na myśli? – Shepmaster