while(true) ;

クソNoobな情報系学生のblog。c++やRuby, Railsやってます。perlは猛勉強中。

RubyのFork + Socketを利用したプロセス間通信 その1

どうも、kazunyaaanです。

今回は双方向の通信ができるUnixSocketを使ってみます。 インターネットドメインソケットと類似してますが、ネットワークプロトコルは使用していない等のため、
高速な通信を可能としています。(たぶん...後々確認予定...)

初めは、UnixSocketを使った基礎的なプログラムから。 今回はUNIXSocket.pair(Socket::SOCK_DGRAM)とし、コネクションレス型通信(データグラム)を扱います。

以下、実行結果。

$ ruby Test_unixsocket.rb
[P] I am parent processe.
[C] I am child processe.
[P] C -> P : 0
[P] C -> P : 1
[P] C -> P : 2
[P] C -> P : 3
[P] C -> P : 4
[C] P -> C : 0
[P] C -> P : 5
[C] P -> C : 1
[P] C -> P : 6
[P] C -> P : 7
[P] C -> P : 8
[C] P -> C : 2
[P] C -> P : 9
[C] P -> C : 3
[C] P -> C : 4
[C] P -> C : 5
[C] P -> C : 6
[C] P -> C : 7
[C] P -> C : 8
[C] P -> C : 9

こんな感じですかね。やっぱり、Rubyで組むと楽ですね。

多プロセスの場合、やっぱり、unixsocketを共有しちゃうと駄目なのかな...?