IPC

[[ Rust ]]でIPC(プロセス間通信)をする。

選択肢

  • stdin/stdoutでがんばる
  • UNIX domain socket (stream/datagram)
  • unnamed/named pipe (= mkfifoで作られるもの?)
    • one-to-oneで、半二重通信。相互通信をするには二本pipeを張る
    • Named pipeはどこかにファイルを置いて、それに接続する形になる。unnamed pipeは基本的に親子プロセス間に使う(生成時にpipeを渡せるので)。
    • mkfifoとbincodeによる実装例 (credit: Alice Ryhl)
      • bincodeはRustのデータをシリアライズするライブラリ
        • Rubyでいうmarshal
      • でもこういうのバグ作りがち
  • DBus
  • メッセージキュー:ZeroMQ, RabbitMQ, nanomsg…
    • zmq クレート
      • 更新されていない。クロスコンパイルするときにライブラリのバージョンが噛み合わなくてうまくいかなかった。
  • ローカルHTTPサーバ
    • なんかまわりくどいけど、Web慣れてるとこれがラクなのは否めない
  • ローカルTCP, UDPサーバ
    • 比較的楽
  • 各種RPCプロトコル
    • gRPC
    • xml-rpc
  • ipc-channel servoが作ってる。Rust同士なら会話できる。
  • tarpc : Rust同士でしか使えない?
  • interprocess unix, windowsが提供するIPCメカニズムをいろいろ使える

参考

Backlinks