PQCompo Programmer's Guide

Copyright 1999 (c) Takezou


Notification


<目次>


  1. Notification機能とは

    Notification機能を使用することで、バックエンドからフロントエンドへの非同期の通知を行うことができます。例えば、他のクライアントがテーブルのレコードを変更したかどうかを監視したい場合、通常は一定間隔でサーバーにポーリングをかけて調べるという方法が取られますが、この場合、サーバおよびネットワークにそれなりの負荷がかかります。Notificationとルール機能を組み合わせることにより、ポーリングを行わずに、これらのイベントを受け取ることが可能になります。NotificationはlibpqのPQnotifies関数をNotificationIntervalで指定された間隔呼び出すことにより行われますが、この関数呼び出しはlibpqに対して、バックエンドから通知が来ているか問い合わせるだけなのでトラフィックは発生しません。

  2. Notification機能の使用例

    1. テーブルを作成する。

      PSQLから以下のコマンドを実行し、テーブルを作成します。

      CREATE TABLE notifytable (Colum1 text);

    2. テーブルにデータが追加された時、変更された時にイベントを発生させるルールを作成します。

      CREATE RULE notifyrule1 AS ON INSERT TO notifytable DO
        [NOTIFY testinsert];
      CREATE RULE notifyrule2 AS ON UPDATE TO notifytable DO
        [NOTIFY testupdate];

      以上でnotifytableにデータが追加されたときに"testinsert"イベントが、データが変更されたときに"testupdate"イベントが発生するようになりました。

    3. TPQCompoUseNotificationプロパティをtrueにし、Notification機能を使用可能にします。

    4. TPQCompoOnNotifyイベントに以下の文を記述します。

      procedure TPQChatForm.PQCompo1PQNotify(Sender: TObject;
            PID: Integer; EventName:
      String);
      begin
        if EventName = 'testinsert' then
          ShowMessage('
      データが追加されました。')
        else
        if EventName = 'testupdate' then
          ShowMessage('
      データが変更されました。');
        end;
      end
      ;

    5. TPQCompoExecSQL文で以下の文を実行することで、'testinsert'、'testupdate'イベントが発生したときに、クライアントに通知が来るようになります。

      PQCompo1.ExecSQL('LISTEN testinsert');
      PQCompo1.ExecSQL('LISTEN testupdate');

    6. notifytableに対してInsert文、Update文を実行すると、PQNotifyイベントが発生して、メッセージが表示されます。


<戻る>