REST 重量コールバック

提供: RAD Studio
移動先: 案内検索

DataSnap REST への移動


重量コールバックを使用すると、Web ページから、JavaScript 関数をサーバーに登録し、"リスン" するチャネルの ID を指定することでそれらがどの状況で通知を受けるかを指定することができます。 これにより、シン クライアントは、絶えず要求を発行して何かが変更されたり起こったかどうかを調べなくても、サーバーからほぼ即座に通知を受け取ることができます。

サーバーから通知を行うには、まず、サーバー コンポーネントとすべてのサーバー クラス コンポーネントをデータ モジュール フォーム(または、単一のインスタンスのみ生成される場所。Web モジュール以外)に移動する必要があります。 サーバーには、チャネル ID と TJSONValue 型の "メッセージ" オブジェクトを受け取るブロードキャスト関数と通知関数があります。 通知関数は、メッセージの送信先となるクライアント コールバックを正確に指定するための追加パラメータを取ります。 Memo コンポーネントが変更されるたびにメッセージをブロードキャストする場合は、このコンポーネントの変更に対応するイベントを追加し、その中で以下を行います。


Val := TJSONString.Create(Memo1.Text);
[DSServer].BroadcastMessage('MemoChannel', Val); //'MemoChannel' can be replaced by anything

次に、クライアント コードでは、ID が "tarea"(何でもよい)のテキスト領域を持つフォームを追加し、以下の JavaScript コードを追加して、それが何らかの方法(フォーム送信、ページ オンロードなど)で必ず実行されるようにします。


var channel = new ClientChannel(null, "MemoChannel"); //this matches the server's Channel ID
var callback = new ClientCallback(channel, null,
  function(jsonValue) {
    if (jsonValue != null) {
      document.getElementById("tarea").value = jsonValue;
    }
    return true;
});
channel.connect(callback);

このサンプル コードにより、サーバー上のメモ コンポーネントに入力されるものと常に同期するテキスト領域が Web ブラウザに表示されるようになります。

XE2 では、JavaScript REST コールバックが、それ自身のチャネルの ServerChannelNames に加えて、リスンする ServerChannelName のリストを指定できるようになりました。 ClientCallback コンストラクタには、任意指定の最後のパラメータがあり、これが、チャネル名の JSON 配列になっています。 リスンするチャネル名をさらに指定したくない場合には、これを空配列や null に設定できます。

これは、ブラウザによる接続制限のために、特に JavaScript で必要となります。 なお、すべてのクライアントを対象にコールバック ID の命名規則を設けることで、同様の動作をシミュレートできます。 この場合、サーバーでは、指定されたチャネルおよびコールバック ID(クライアントではない)にブロードキャストできます。 これは、コールバックが自分自身のチャネルをリスンするのとほとんど同じです。 ただし、クライアントは複数のコールバックで同じチャネルをリスンすることはできなくなります。 また、親チャネルを指定することで、サーバーも制限を受けます。

関連項目