[kansaipm] Re: Socketについて教えてください

yuhashimoto yuhashimoto at hi-ho.ne.jp
Wed Dec 26 19:07:40 CST 2001


> 川合孝典です。
> PlRPCでsingleモードで動かしたら、よいのではないかしらんと単純に考え
> たりするんですけど、いかがなもんでしょう?そのベースのNet::Daemonも
> ありますが。
ありがとうございます。あたってみます。

nakajimaさんwrote
>  私も同じようなことをやったことがあります。その場合は、一回のデータベー
> スアクセスはごく短いものだったので、サーバー側は単純に順次処理し、競合し
> た場合はソケットの待ち行列に任せてしまうというやり方をとりました。
ヒントをありがとうございます。この考え方で試してみます。

りゅうちさんwrote
>なんとなく... そのデータベースを捨てて、PostgreSQL, MySQL, Oracle など
>の(まともな)データベースにしてしまったほうがいいのでは??
今までの、システムとの互換性の問題があって、当面は捨てれないのです。

みなさん、私の知識の範囲外で、ヒントをくださるので、非常に参考になります。

ところで、気になっていたんですが、perl初心者の方で、話題についていけない方
(私もよくあるのですが^_^;;)に、私が理解した範囲内で、若干の説明をします。

プログラム同士でなにかやりとりをしたい場合、unixには、メッセージキュー、ソ
ケット通信、シグナル(信号)による割り込み、共有メモリ等があります。(1つなら、
楽なのねー)。
サーバープロとは、サービスを受け付けるプロで、クライアントは、要求し、サービ
スを受けます。サーバは、クライアントからの要求を受けたら、別のクライアントか
らの要求を受け付けるため待ちに入る必要があります。
そこで、forkで、別プロセスを発生させて、実際の処理は、その子プロセス(自分の
コピー、分身の術か)にまかせます。シェルって1行のコマンドをforkで、発生させ
てるんですね。

それで、後は子プロセスが、クライアントとの処理をやって、勝手に終了すればいい
んですが、子プロセスが終了したとき、ゾンビといって、プロセスの残骸が、残るこ
とがあります(psコマンドで確認できます)。それの後処理をするために、親は、
wait関数で待つ必要があるのです。急がないプログラムなら、順次、処理すれば、
いいんですが、みんな、せっかちなんです。すなわち、2つの事象の待ちを同時に
やる必要があるのです。そこで、シグナル(ソフトウエア割り込み)で、一方を処理
しようというのです。

なお、socket通信(tcp/ip)で、相手を識別するのは、ipアドレス+ポート番号
で、プログラムで使っているポートは、netstat -pコマンドで確認できます



More information about the Kansai-pm mailing list