ページの先頭行へ戻る
Enterprise Postgres 17 Connection Manager 利用ガイド

3.3.3 非同期型の通信方法を使用している場合

非同期型の通信方法とは、PQexec()のような関数を使わずにPQsendQuery()のような関数を使用して、データベースからの応答を待たずにアプリケーションに制御を戻し、かつ、PQsetnonblocking()によって送信完了やすべての結果の受信の完了を同期しないようする方法です。この方法では、ユーザーアプリケーションが、poll()システムコールなどを使用して、PQsocket()が返すデータベースに繋がるソケットを監視します。

例えば、データベースとの間のリンクがダウンした場合には、PQsocketが返すソケットをpoll()システムコールで監視しただけでは、そのことを検知できません。

しかし、例えば、PQcmSocket()が返すconmgrプロセスに繋がるソケットのデータ受信(POLLIN)を監視すれば、conmgrプロセスから送信される、データベースの異常検知のパケットの受信を検知することができます。受信を検知したならば、ユーザーアプリケーションは、このパケットを直接操作する必要はありません。PQgetResult()やPQcosumeInput()などを既存のアプリケーションロジックに従って呼び出すことで、これらの関数が、あたかも接続が切断されたかのように振る舞います。このときに返されるSQLSTATEなどは、“アプリケーション開発ガイド”の“アプリケーションの接続先切り替えが発生した場合のエラーと対処”を参照してください。もし、Connection Managerを使用していない場合、PQcmSocket()は-1を返します。