我尝试使用C中的libpq库建立到PostgreSQL数据库的非阻塞连接,并且我希望能够在建立连接后触发通知或回调函数。
我知道PQconnectStart()可以用来发起一个非阻塞连接,PQconnectPoll()可以用来检查连接的状态,但是我不确定在连接建立后如何触发通知或回调函数。
PGconn *conn;
PGconnStatusType status;
conn = PQconnectStart("dbname=mydatabase user=myusername password=mypassword");
if (conn == NULL) {
fprintf(stderr, "Connection initialization failed\n");
exit(1);
}
while ((status = PQconnectPoll(conn)) != CONNECTION_OK) {
if (status == PGRES_POLLING_FAILED) {
fprintf(stderr, "Connection failed: %s\n", PQerrorMessage(conn));
PQfinish(conn);
exit(1);
}
}
// Connection is established, how do I trigger a notification or callback function?
// Do something with the connection here...
PQfinish(conn);
字符串
4条答案
按热度按时间pkmbmrz71#
我觉得你做不到如果有响应,您必须在套接字上调用
select()
来轮询。您可以启动一个线程或并行进程,使用select()
进行轮询,调用您的回调。vmjh9lq92#
我觉得可以用Notice Receiver。
您可以使用PQsetNoticeReceiver设置自定义的通知接收方回调函数,在收到通知或警告消息时调用。这个回调函数可用于根据应用程序的要求处理接收到的消息。
Documentation Notice Processing
xtupzzrd3#
好的,在连接建立之后,触发通知将使用
PQsetNoticeReceiver
函数。它允许您设置一个回调函数,每当从PostgreSQL收到警告消息时都会调用该函数。触发器应该是这样的:
字符串
其中
notificationHandler
是定义的回调函数。pinkon5k4#
为了在连接建立后触发通知或回调函数,可以使用PQsetNoticeReceiver函数设置回调函数。当从数据库接收到通知时,将调用该函数。