Transcript ppt file

情報工学科 3年生対象 専門科目
システムプログラミング
第14回
プロセス間通信
並行サーバ
簡易Web server
担当:青木義満、篠埜 功
1
前回の復習、補足
• inet_server.cを修正。BUFSIZEが256では足りないので、
1024にする。(256だと、クライアント(webブラウザ)がメッ
セージ送信の終了を確認できず、そこから先に進まなくな
る。)
• accept及びread, writeをfor loopで繰り返す。
– 反復サーバ方式
• クライアント(ブラウザ等)からのメッセージ
– 1行目は、GET /index.html HTTP/1.0 など。(index.html部分はブラ
ウザの入力によって変わる。HTTP/1.0の部分はHTTP/1.1が主流。)
– 2行目以降は各種情報
• 応答メッセージ
– HTTP/1.0 200等(1行目)で応答の種別、2行目から各種情報の後、
ファイルを送る場合は送る。
2
前回の復習、補足
• ファイル種別は、htmlファイルに決め打ちしている。
• 実際のweb serverでは、ファイルのアクセス権限のチェックを
行う。(otherのreadが許可されている場合のみファイルを送信
する。web_server0.cでは、web serverプロセスの所有者(こ
の講義では自分)のread許可があれば送信してしまう。)
• 要求されたファイルがない場合は404を返してその処理を終え
る。(web serverは終了させない。)
• メソッドがGET以外の場合は400を返してその処理を終える。
• 詳しくはHTTPプロトコルの定義を参照(本講義の範囲外)
• serverを起動すると、学内からアクセスが可能な状態になるの
で、見られては困るファイルが他人に取得されることがないよ
う注意する。(実験が終わったらサーバを終了させる。)
3
反復サーバ方式(復習)
accept, read, writeをfor loopで無限に繰り返す。
– 1つの処理(メッセージ受取、メッセージ送信)が終
わってから次の処理を行う。
複数の要求が短い間隔で届いた場合、
応答の開始が遅くなる。
4
並行サーバ方式
• 要求が来るたびにforkシステムコールで子プロ
セスを起動し、子プロセスが処理を行う。
• 複数の処理が並行して行われる。
複数の要求が短い間隔で届いた場合、
早く応答を開始できる。(大きなファイルを
短時間に続けて要求された場合など)
5
並行サーバ方式のプログラム例
• inet_server_time.c
• 「クライアントから接続要求がきたら、時刻情報をクライアント
に送信する」という処理を無限に行うプログラム。
• 処理手順: クライアントから接続要求がきたら、forkシステム
コールで子プロセスを生成し、子プロセスに処理を行わせ、親
プロセスは、親プロセスにおいては不要なソケットを閉じて、次
の接続要求の処理に戻る。
• ポート番号は、(50000+学籍番号下4桁)としてください。
• 実行手順
$ gcc inet_server_time.c
$ a.out &
$ telnet localhost ポート番号
6
レポート課題
•
•
•
•
•
web_server0.1.c (web_server0.cを今日の
inet_server_time.cの形式に合わせたもの) を並行サーバ方
式に変える。
締切: 1月20日(火) 午前9時まで。それ以降は成績への反映
を保証しない。
今回のレポートは加点方式とする。
提出は以下に電子メールで送信。
– [email protected]
提出内容
1. web_server0.1.c (あるいはレポート課題をやった人は
web_server1.cでもよい) に変更を加えた部分についての
簡単な説明文書
2. 変更したプログラム(ファイル名はweb_server2.cとする)
7