Part33:Taskとgen-tcp

希「いよいよサーバっぽくなってくるで。今回は外部とTCPで通信してみるよ」
凛「TCP?」
海未「・・・そこからですか・・・」
希「凛ちゃん、1日あげるからこのマスタリングTCP/IP 入門編 第5版を読んでくるんや」
凛「うん!頑張って読んでみる!」


翌日

凛「1日で読めるわけないにゃ!!」
希「まあまあ、さわりだけでも分かれば十分や」

希「というわけで本題じゃないネットワークの話は華麗にスルーして先に進むよ」

希「まずは適当なポートで接続を受け付けて、送られてきた文字列に”umi”をつけて返すサーバを作るで」
海未「やめてください」

希「前回作ったKVServerを使う。kv_umbrella/apps/kv_server/lib/kv_server.exに」

希「こうや。で、これをiexで起動してやる」

希「これでサーバが動いてる状態や。OSによってはファイアウォールに引っかかるから、そこはよしなに。で、telnetでつないで・・・」

希「何か入力すると”umi”がついて戻ってくるやろ?」
凛「海未ちゃん総受けにゃ」
海未「やめてください」

希「それっぽく動いてそうに見えるけど、telnetの方でcloseすると・・・」

希「異常系の考慮が足りてないってわけや。前に出てきたように、Supervision Treeの管理下で動かしてやればええね」
海未「クラッシュしても再起動すればいいのですね」

希「kv_server.exでKVServerをSupervisorの子として追加してやる」

希「さあこれで、Supervisorの管理下でサーバが起動した。さっきみたいにtelnetでつないでみようか」

希「エラーは出る。出るがっ!まだサーバは死んでいないっ!」

凛「おおっ!」
海未「Supervisorによって再起動されたのですね」
希「これで何が起きようがとりあえず動き続けるわけや」

希「では最後の問題や。この状態やと、1つのターミナルからしか接続を受け付けられへん。それじゃサーバとしちゃ役に立たんな?」
海未「サーバは多数のリクエストを捌いてこそ、ですね」
希「そのために、接続を受け入れるプロセスとリクエストを処理するプロセスを分けておく必要があるんや」

希「1つ目の修正は、KVServerにリクエスト処理をやるタスク用のSupervisorを追加することや」

希「2つ目の修正で、Supervisorの管理下で、リクエストを処理するプロセスを起動してやる」

希「このあたりの実装にはTaskってモジュールを使ってる。これは、プロセスの起動とか同期を簡単に扱うモジュールや。今回みたいにやることがechoだけみたいな場合は、いちいちモジュール定義するよりTask使うと楽や」

凛「じゃあ、まず1つ端末動かしてみるにゃ・・・うん、動いたよ」
希「そしたらもう1つ端末を起動して同じことをやるんや」
凜「えーっと・・・うん、こっちも動いてる!」
希「そしたら片方closeしてみようか」
凜「closeっと。で、もう片方は・・・おおっ、まだちゃんと動くにゃ!」
希「ちゃんとしたサーバっぽくなってきたやろ?」

海未「では、次はサーバに対してコマンドを送信できるようにしてみましょう」
希「そろそろ完成が見えてきたね」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です