3.5. 异步通知

Postgres 支持通过 LISTENNOTIFY 命令产生的异步通知.一个后端用 LISTEN 命令注册一个它感兴趣的信号灯. 所有正在监听某一命名信号灯的后端在该条件名的 NOTIFY (通知)被另一个后端执行后都将被异步地通知. 没有附加的信息从通知发出者传递到通知接收者.因此,很典型地, 任何实际的需要被传递的数据都是通过一个数据库关系传递的. 通常条件名是与相关联的关系同名,但是并不是一定要与某个关系相关才行.

注意: 以前,本文档把用于异步通知的名称与关系或者表相联。 但实际上在这两个概念的实现上没有任何直接的联系, 因而实际上命名信号灯不需要象以前定义的那样与对应的关系相关联。

libpq++ 应用在与之相联的后端收到一个异步通知时将被通知。 不过,从后端到前端的通讯不是异步的。 libpq++ 应用必须轮询后端以便查找是否有待处理的信息。 在一个查询执行完毕后,前端可以调用 PgDatabase::Notifies 来判断目前是否有从后端来的任何通知数据。 PgDatabase::Notifies 从一个来自后端的未处理通知列表里返回一个通知。 如果没有来自后端的待处理的通知,该函数返回 NULL。 PgDatabase::Notifies 的行为象一个弹出栈。一旦从 PgDatabase::Notifies, 返回了一个通知,该通知就被认为已处理并且被从通知列表里删除。

第二个例子程序给出了一个使用异步通知的例子。