Aptana Jaxerのアーキテクチャ:“JavaScriptだけ”を可能にする仕組み

白石俊平(あゆた)
2008-02-04 16:15:00
  • このエントリーをはてなブックマークに追加

サーバプロキシについて

 ということで、今回のサンプルで使用したrunat="server-proxy"は「サーバ上の関数を実行するためのプロキシを生成する」というオプションであり、非常に強力だ。

 サーバプロキシについては、もう少し説明しておく必要のあるトピックが存在する。

プロキシの指定方法

 プロキシの指定方法には、先ほど紹介した<script runat="server-proxy">を使う他にも、「関数オブジェクトのproxy属性にtrueを指定する」という方法もある。以下を見てほしい。

<!-- runat="server" (server-proxyではない)を指定する -->
<script runat="server">
    function hello(name) {
        return "Hello, " + name;
    }
    // hello関数をクライアントからも呼び出し可能にする
    hello.proxy = true;
</script>

 また、関数オブジェクトのrunat属性を利用して、runatの指定を関数ごとに行うこともできる。 hello.runat = "server-proxy";

 どの指定方法を用いるかは自由だ。

サーバの関数を非同期で呼び出す

 作成されたサーバプロキシは、サーバ上の関数を同期で呼び出すということには注意が必要だ(非同期呼び出しが常識になっているだけに)。つまり、サーバにリクエストを行って戻り値を受け取るまでは、他の処理を行うことができない。

 非同期呼び出しを行いたい場合は、関数名の後ろに「Async」を付けたバージョンを呼び出し、コールバック関数を渡す必要がある。上のhello()メソッドを非同期で呼び出すには、以下のようにする。

// 非同期版のサーバプロキシは後ろに「Async」がつく。
// 結果を受け取るためのコールバック関数を第一引数に指定する
helloAsync(
    function(result) {
      alert(result)
    }, name);

まとめ

 今回は、Jaxerプログラミングの非常に重要な位置を占める「サーバプロキシ」について詳しく説明した。サーバプロキシのおかげで、サーバの処理を呼び出すロジックを一切記述する必要がなく、しかもサーバサイドもJavaScriptで記述できるのでコードの見通しが非常に良くなる。

 また、serverやbothといったほかのrunat属性についても、非常に使用頻度は高い。しっかり把握しておこう。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]