2016-04-03 5 views
0

socket.ioを使用して、データベースからクライアントにデータを送信しています。しかし、私のコードは、たとえデータが同じであっても毎秒クライアントにデータを送信します。 1秒ごとではなく、DB内のフィールドが変更された場合にのみデータを送信するにはどうすればよいですか。ここでデータベースフィールドが変更されたときにクライアントにデータをプッシュ

は私のコードです:http://pastebin.com/kiTNHgnu

答えて

1

MySQLでの変更の通知を取得する簡単/簡単な方法はありません。オプションのカップルが含まれます:

  • データベースが実行されているサーバーへのアクセス権を持っている場合は、パーサのいくつかの並べ替えて、MySQLのバイナリログをストリームして、目的のテーブル/列を変更イベントを確認できます。このルートに行きたい場合は、すでにnpmにbinlogパーサーがあります。

  • MySQLトリガーを使用してUDF(ユーザー定義関数)を呼び出します。これは、あなたの特別な必要性のためのこれらの全体がたくさんあるわけではないので少しトリッキーです。しかし、便利なものがいくつかあります。たとえば、のように、Redisを既にインストールしている場合に動作するRedisキューにプッシュします。そのワイヤ形式をサポートするさまざまなキューの実装にはSTOMP UDFがあります。また、ファイルに書き込むlog_errorやサーバー上で任意のコマンドを実行するsys_execなどのUDFもあります(明らかに危険なので、絶対的な最後の手段にすべきです)。これらのどれもうまく動作しない場合は、独自のUDFを作成する必要があります。これは、UDF Cインターフェイスに精通していない場合はかなりの時間がかかります(経験から話す)。

    また、UDFがの場合、では、UDFの実行時間に応じてトリガーされたクエリの遅延が発生する可能性があります。

関連する問題