2016-07-19 15 views
1

私は、PostgreSQLからのデータ変更の通知を受け取る必要のあるC++アプリケーションを、libpqxxライブラリに書きました。しかし、tutorialにはそのようなユースケースは含まれていません。通知は、複数のチャネルで受信する必要があります。また、ネットワークライブラリーとしてboost::asioを使用しています。可能であれば、私にとってはasioのソケットクラスと、未処理のBSDスタイルソケットのポーリングではなく通知イベントの非同期コールバックを使用してください。誰かがこれのためのサンプルコードや、これを達成するための外部リソースへのリンクを提供できますか? notification_receiverのAPIリファレンスであるlibpqxxを使ってPostgreSQLデータベースから通知を受け取るには?

+0

あなたは、PostgreSQLにクライアントに「データ変更」を通知できると言った人はいますか? Postgresqlにはそのようなものは何もありません。 PostgreSQLが持つ唯一のことは、協力しているクライアントプロセス間の抽象的なリスン/通知のシグナル伝達機能です。 –

+1

トリガーとともに使用できるNOTIFY機能を意味します。 [こちら](https://www.postgresql.org/docs/9.5/static/sql-notify.html)はドキュメントです。クライアントアプリケーションは、データベースへのソケットを開いて、指定されたチャネルの通知を待ち受けることができます。 – bobeff

答えて

1

あなたはhttp://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00208.html「通知とレシーバ」を参照してください、pqxx::notification_receiverから派生したクラスを必要とし http://pqxx.org/devprojects/libpqxx/doc/4.0/html/Reference/a00062.html

+0

_boost :: asio_イベントループで受信した通知を統合することはできますか? – bobeff

+0

ポーリングを避けることが本当に重要な場合は、libpqxxの代わりにlibpqを使用します。ポーリングを避ける方法については、https://www.postgresql.org/docs/9.1/static/libpq-notify.htmlを参照してください。 自信がない:私はasioとの直接的な統合は本質的に不可能だと思います。私は、libpqで通知を受け取るために排他的に別のスレッドを実行し、io_service :: postを使ってasio hairballに通知を渡します。 – NovaDenizen

+0

10x * libpqxx *と* boost :: asio *を* asio *の* null_buffers *機能を使って統合することができました。 – bobeff

関連する問題