このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

AppleScript CGI の多重処理問題の回避法

発言者:田中求之
( Date Tuesday, January 27, 1998 17:39:35 )


AppleScript で CGI を作った場合、CGI が続けて呼び出される(つまり前の処理が
終わっていないうちに、次の処理が来る)と、後から来た処理が割り込んで実行されて、
前の処理は中断される、ということになります。これは、AppleScript が re-entrancy
を確保するための仕様です。

ところが、会議室などの CGI の場合、これが問題を起こすことがあります。たとえば
Web オートパイロットソフトで続けざまにアクセスがかけられた時などです。

で、回避方法、つまりどんなに処理が重なっても、処理が呼び出された順番で行われる
ようにする方法として、FaceSpan を使ってアプリケーションにする、という方法が
あります。

FaceSpan の Project Script として書かれたハンドラーは、多重呼出がかかっても
割り込み処理を行わず、呼ばれた順に処理していきます。ですから、CGI のスクリプト
を FaceSpan の Project Script に書き、これをアプリケーションにすれば、
先の問題は起きないということになります。

FaceSpan では、メニュー操作などをこの Project Script で処理しますので、
メニューが選ばれた順番に処理が行われることを保証するためだと思うのですが
(これが崩れたら GUI インターフェースは成り立ちませんから)、ハンドラーの
呼び出し順序を独自に管理しているようです。

実際に CGI として使ったときに、オーバーヘッドなどによる処理速度の低下が
どの程度みられるかなどは試していないのですが、一つの方法として使えそう
です。

…ひさしぶりに FaceSpan でちょっとしたツールを使っていて、そういや
Project script にメニュー処理があるけど… と気がついたのでした (^_^;;
簡単なスクリプトで多重呼出のテストをやってみましたが、ちゃんと呼び出された
順に処理しますね。

田中求之 さんからのコメント
( Wednesday, January 28, 1998 15:46:21 )

>実際に CGI として使ったときに、オーバーヘッドなどによる処理速度の低下が
>どの程度みられるかなどは試していないのですが、一つの方法として使えそう
>です。

こういうのを試すには、この会議室は絶好の場所なので (^_^;; 先程から
FaceSpan アプリケーション版に切り替えてみました。今のところ、速度の
低下はないようです。

あとは、多重アクセスが来たときの処理の安定性がどうかな、ということですが
このへんはしばらく様子を見ていようと思います。

田中求之 さんからのコメント
( Thursday, January 29, 1998 11:54:10 )

約10時間動かしてみたところ、これまで CGI の処理が原因で発生していた
と思われる Timeout が無くなりました。

これまで、全アクセス数の 0.5% - 1% 程度は Timeout が出ていたのですが、
この10時間は、アクセス約5000に対して Timeout が 0 という状況です。
(定期的にステータスをメールで監視しているので、こういう動向はすぐ把握
できるんです)

このあと、昼間のアクセスの第1ピーク( 12:00 - 13:00 )を迎えますので、
その処理がどうか注目してます。

田中求之 さんからのコメント
( Friday, January 30, 1998 01:55:03 )

ピーク時の処理も問題ないようです。

これまで時折発生していた、アクセスをかけてもぜ〜んぜんデータが送られてこない
という現象も止まったようです(他の方、どうですか?)

あとは、Applet の場合、原因不明でバスエラーで CGI がクラッシュする、それも
1度クラッシュしたらあとはシステムをリスタートするまでは絶対にクラッシュしない、
という不可思議な動作が起こっていたのですが、これが無くなるようなら、CGI は
FaceSpan で組んだほうが安定しているということになるんだけど… (今のところ
クラッシュの気配はみじんもないのですが)

北山@八王子 さんからのコメント
( Thursday, September 24, 1998 12:54:46 )

かなり時間の経ってしまっている書き込みですが、追加コメント(質問を)させて頂きます。

私も以前からたまに発生するCGIの原因不明のエラーに悩まされていたのですが、この書き込みを読ませて頂き、他の用途も考えていたのでFaceSpanを入手しました。

さて、実際にFaceSpanでアプリケーション化する際のご質問なのですが、今までAppleScriptで動作していたスクリプトをそのままコピーして問題なく動作するのでしょうか?

実際にコピー&ペーストでFaceSpanに持ってきてアプリケーション化すると問題なく動作している様なのですが・・・
私のCGIの機能の中には田中先生のCGIサンプルにも含まれている、ファイルメーカーを使ったデータベースの機能も含まれています。特にこの機能で不具合が発生する可能性が高い様な“気”がするのですが、どうなのでしょうか?

なにか、注意する点などありましたらご指摘下さい。

それから「Save As」で保存(アプリケーション化)する際に「Miniature Application」とありますが、「Complete Application」とどのように違うのでしょうか?
また、「Include Dictionary」のオプションの意味と効果についても教えて下さい。

田中求之 さんからのコメント
( Friday, September 25, 1998 00:51:17 )

私の場合は、単純に Project Script にコピー&ペーストしただけで動きました。
ただし、どうせならと、コピーした後でかなり手を入れてから動かしましたので、
ただ単にコピー&ペーストすればいいのかどうかは確約できません (^_^;;

ファイルメーカーの呼び出しに関しては、私は、以前、CGI を組む前に FaceSpan で
テストを行っていたぐらいですから、何の問題もないはずですが…?

FaceSpan の Miniature と Complete の違いは、機能拡張フォルダーに収められる
FaceSpan Extension をアプリケーションに含めるかどうかの違いです。この拡張機
能がないと、FaceSpan (およびそれで作成したアプリケーション)は動きません。

サーバーの Mac に FaceSpan Extension が入っている場合は Mini でなんら問題
はありません(私はすべて Mini にしています)。

Include Dictionary は、出来上がったアプリケーションを AppleScript でコント
ロールしようとするときに、辞書情報が参照できるようにするかどうかを決めるものです
ので、CGI の場合は Include する必要は全くありません。

北山@八王子 さんからのコメント
( Monday, September 28, 1998 10:28:21 )

田中先生ありがとうございました。
これから、実際にサーバーで運用しながら様子を見ようとおもいます。
ところで、1つ問題が・・・
FaceSpanでCGIを作って起動するとメニューから「終了(Quit)」を
選んでもアプリケーションの終了ができません。なぜなんでしょうか?
使っているMacの調子が悪いのかと思って、別のMacでも起動すると
同様の現象が発生します。
なにか分かる方がいらっしゃいましたら、教えて下さい。

余談ですが・・・
私は、AppleScriptしかプログラミングらしいことが出来ない素人ですが、
AppleScriptしか意識せずに作ったスクリプトがFaceSpanでもコンパイル
できるのは、すごいですね。 ちょっとびっくりしました。
もし、同じようにスクリプトをコピー&ペーストしてPCのサーバーで動く
CGIがつくれたら・・・ってありえないですよね。根本的な動作原理に違い
があるのでしょうね。

田中求之 さんからのコメント
( Monday, September 28, 1998 15:06:28 )

>FaceSpanでCGIを作って起動するとメニューから「終了(Quit)」を
>選んでもアプリケーションの終了ができません。なぜなんでしょうか?

FaceSpan の Project Script にスクリプトをコピーしたときに、
最初からあったスクリプトを消してしまいませんでしたか?

FaceSpan のアプリケーションでは、メニューの処理は Project Script
に記述するようになっており(だからこそ FIFO で処理を行うわけですが)、
最初から、Quit などの基本的な処理のスクリプトがかかれています。
これを消してしまうと、メニューが一切使えないアプリケーションに
なってしまいます。

北山@八王子 さんからのコメント
( Tuesday, September 29, 1998 10:01:34 )

ありがとうございます。
ご指摘の通り、記述内容を全く見ないで消してしまっていました。
たびたびもうしわけございませんでした。