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