mysql
を使用して、管理者の操作なしでデータベースの変更を管理画面にプッシュすることはどのように可能pusher
ですか?
pusher
の変更に対してある種のリスナーを実行できますか、mysql
それともpusher
単純にある種の派手なポーリングを実行しますか?
全体として、そのような設定はどのようにコーディングされるのでしょうか?
簡単な例またはリンクをいただければ幸いです。
⚠️戦中!これにより、データベースの速度が低下する可能性があります。これにより、挿入ごとにsys exec'ing curlを使用すると、パフォーマンスが比較的低下します。トリガーでメッセージを別のテーブルに書き込み、別のプロセスでループ内の新しい行をチェックする方がはるかに優れています。
MySQLストアド プロシージャを介して簡単にアクセスできるTRIGGERSにコードを簡単にラップできます。プッシャーで似たようなものを作成できます。私は PubNub でそれを行う方法を知っています。ここでは、PubNub と MySQL のクイック ガイドを示します。シンプルさはあなたが求めるものであり、ここにあなたのソリューションがあります! テーブルのUPDATE、INSERT、およびDELETEアクションを、毎回呼び出されるストアド関数にバインドし、PubNub を使用してモバイル アプリや Web アプリにプッシュ通知を簡単に送信する簡単な方法について説明します。
DELIMITER $$
CREATE PROCEDURE push_message
(p1 DOUBLE,
p2 DOUBLE,
p3 BIGINT)
BEGIN
DECLARE cmd CHAR(255);
DECLARE result CHAR(255);
SET cmd = CONCAT('curl https://pubsub.pubnub.com/publish/demo/demo/0/mysql_triggers/0/%22',p1, ',' ,p2, ',' ,p3,'%22');
SET result = sys_eval(cmd);
END$$;
注: PROCEDURE タイプが正しいDOUBLEまたはVARCHARまたはTEXTであることを確認してください。
CREATE TRIGGER push_message_trigger AFTER INSERT ON your_table_name_here
FOR EACH ROW
CALL push_message(NEW.Column1, NEW.Column2, NEW.Column3);
注: ここで必要な列をプッシュ メッセージに必ず含めてください。
CREATE TRIGGER push_message_trigger AFTER UPDATE ON your_table_name_here
FOR EACH ROW
CALL push_message(NEW.Column1, NEW.Column2, NEW.Column3);
http://www.pubnub.com/console?sub=demo&pub=demo&channel=mysql_triggers - PubNub Dev Console でトリガーが起動されるのを見ることができます。このようにして、変更する必要があるパラメーターと、モバイルおよび Web デバイスで PubNub websocket などで受信できる各プッシュ通知に含める重要なデータを理解できます。
<div id=pubnub ssl=on></div>
<script src=//pubnub.a.ssl.fastly.net/pubnub-3.4.5.min.js></script>
<script>(function(){
PUBNUB.init({
subscribe_key : 'demo',
ssl : true
}).subscribe({
channel : 'mysql_triggers',
callback : function(mysql_trigger_details) {
alert(mysql_trigger_details);
}
});
})();</script>
これで、簡単な手順で MySQL から変更イベントを直接送受信するために必要な手順が完了しました。HTTPS プッシュ通知をキューに入れ、プールするデーモン プロセスにシグナルを発行するなど、この方法を最適化する方法もあります。これはかなり効率的です。
MySQL では、これにはポーリング ループを備えた管理アプリケーションが必要です。
そのための MySQL スキーマを設計すると、ポーリング ループが安価になります。最新のタイム スタンプまたは最新の行 ID のいずれかについて、対象のテーブルをクエリできます。
しかし、それでもポーリングする必要があります。
いくつかのオプションがあります。最も一般的なのは、データベースを変更するときにアプリケーション層でこれを処理することです。これはもちろん、データベースが更新されるコード内の特異点が必要であることを意味しますが、これは常に可能であるとは限りません。ただし、可能であれば、このソリューションをお勧めします。
ポーリングも別のオプションですが、明らかにリアルタイムではありません。これらの条件をチェックし、状況が変化したときにプッシャー API を呼び出すスクリプトを作成するだけです。
もう 1 つの可能性は、カスタム プラグインで MySQL トリガーを使用することです。これにより、データベースが変更されたときにすぐに Pusher API を呼び出すことができます。これは最も複雑な解決策であり、私はあまりお勧めしません。理由のいくつかについては、この質問の最初の回答を参照してください。