Menu

IPC Pipe vs Unix Socket for a Resident Daemon in Tauri — What I Learned
📰

IPC Pipe vs Unix Socket for a Resident Daemon in Tauri — What I Learned

DEV Community·hiyoyo·6 months ago
#FWgi5RI9
#option#rust#tauri#performance#socket
Reading 0:00
15s threshold

All tests run on an 8-year-old MacBook Air.

When I built Ghost Engine — a resident Swift daemon that handles PDF rendering — I had to decide how Rust talks to it.

Two options: stdin/stdout IPC pipe, or a Unix domain socket.

I tried both. Here's what actually happened.

Option 1: stdin/stdout pipe

Simple. Spawn the process with Stdio::piped() , write commands to stdin, read responses from stdout.

let child = Command :: new ( "ghost-engine-daemon" ) .stdin ( Stdio :: piped ()) .stdout ( Stdio :: piped ()) .spawn () ? ;

// Send command writeln! ( child .stdin .as_mut () .unwrap (), "render:page:3" ) ? ;

// Read response let mut response = String :: new (); BufReader :: new ( child .stdout .as_mut () .unwrap ()) .read_line ( & mut response ) ? ;

Enter fullscreen mode

Exit fullscreen mode

Pros: Zero setup. No port conflicts. No socket file cleanup.

Cons: Strictly request-response. One command at a time per pipe pair. No multiplexing.

Option 2: Unix domain socket

More flexible.…

Continue reading — create a free account

Join HashtagPLUS to read full articles, follow hashtags, vote, and join the conversation.