ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Webサーバーからリモートサーバーに、非同期で処理実行

2013-12-05 17:54:43 | JavaとWeb
いままで

リモート先でジョブが終わったかどうかを確認する
http://blog.goo.ne.jp/xmldtp/e/cbbdbadaae9c2c8eea8ed8b2ed3cb0dd



CentOSでTomcat6
http://blog.goo.ne.jp/xmldtp/e/74e421dcdc3e1e6b2719d79f96d95c2f

を書いてきた目的なんだけど、じつは、こんなことをしたい。




■お題

 今、Webサーバーにアクセスして、そことは違う別のサーバー上(以下「リモートサーバー」と記す)で、処理を起動したい。

 しかし、この処理はとても時間がかかるので、(最低数分だが、平均30分以上、1~2時間かも?)バックグラウンドで処理を実行したい。そして、処理結果をファイル
に書き出し、バックグラウンド処理は終了する。

 その結果をブラウザ上に表示したい




■方式の概要

(1-ブラウザ側)
・あるボタンがクリックされると、AJAXで、サーバーのExeActionを起動する。

(1-Webサーバー)
・ExeActionは、バックグラウンドで、SSHを使って、リモートサーバーの
 起動シェルをバックグラウンドで起動する。
 バックグラウンドなので、すぐに戻ってきて、結果をブラウザに返す。

(1-リモートサーバー)
・リモートサーバーの起動シェルは、行いたいジョブをバックグラウンドで
 起動する。この起動シェルは、一意になるような引数が与えられている。
 (たとえば、WebサーバーのセッションIDなど)

  起動時、起動中ファイルを作成する。
  起動ファイルは、ファイル名の一部に上記一意の名前を含む
  (例:一意名12345のとき、job12345.txt)

  処理を行い、処理終了後、処理内容を、結果ファイルに書き出し、
  起動中ファイルを削除する。
  結果ファイルには、ファイル名の一部に上記一意の名前を含む
  (例:一意名12345のとき、ret12345.txt)

(2-ブラウザ)
・1-Webサーバーで帰ってきたら、setTimeoutを使って、一定時間待ち、
 その後、リモートサーバーの処理が終了したか、AJAXでWebサーバーの
 ChkActionを呼び出す

(2-Webサーバー)
・ChkActionは、リモートサーバーに、ジョブが終了したかどうかを、
 SSHでリモートサーバーのチェックシェルを起動して、尋ねる

(2-リモートサーバー)
・リモートサーバーのチェックシェルは、lsコマンドを実行し、
 grepで、一意になるような引数の起動中ファイルが起動しているか
 どうかをフィルタし、そのような行があれば起動中、無ければ終了
 とみなし、Webサーバーに結果を返す

(2-Webサーバー:返り)
・ChkActionでは、結果を受け取り、処理中ならは、cont、
 終了していたらendを返す

(2-ブラウザ:返り)
・Webサーバーの結果に応じて、もし、cont(処理中)であれば、
 (2-ブラウザ)へ戻り、処理終了までチェックを繰り返す
 もし、endであれば、(3-ブラウザ)へ

(3-ブラウザ)
・処理結果を得るため、AJAXでRetActionを呼び出す。

(3ーWebサーバー)
・RetActionはSSHを使って、リモートサーバーの結果シェルを呼び出し、
 結果ファイルの内容を返すように求める

(3-リモートサーバー)
・結果シェルは、結果ファイルの内容を返した後、結果ファイルを削除する

(3-Webサーバー:返り)
・RetActionは、結果をブラウザに返す

(3-ブラウザ:返り)
・ブラウザでは結果を受け取り、次画面表示




以降、これらのプログラムを詳しく見ていく。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPは、一番遅い言語ってことで、おK?

2013-12-05 14:26:51 | PHP

新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!
https://paiza.jp/poh/ec-campaign/

を見ると、おおむねPHPは、他の言語とくらべ、遅いよね。
PHPは、一番遅い言語ってことで、おK?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする