C语言 如何使用libpq中的非阻塞连接函数,并在与libpq建立连接时触发通知或回调?

fnatzsnv  于 2023-08-03  发布在  其他
关注(0)|答案(4)|浏览(122)

我尝试使用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);

字符串

pkmbmrz7

pkmbmrz71#

我觉得你做不到如果有响应,您必须在套接字上调用select()来轮询。您可以启动一个线程或并行进程,使用select()进行轮询,调用您的回调。

vmjh9lq9

vmjh9lq92#

我觉得可以用Notice Receiver
您可以使用PQsetNoticeReceiver设置自定义的通知接收方回调函数,在收到通知或警告消息时调用。这个回调函数可用于根据应用程序的要求处理接收到的消息。
Documentation Notice Processing

xtupzzrd

xtupzzrd3#

好的,在连接建立之后,触发通知将使用PQsetNoticeReceiver函数。它允许您设置一个回调函数,每当从PostgreSQL收到警告消息时都会调用该函数。
触发器应该是这样的:

PQsetNoticeReceiver(conn, notificationHandler, NULL);

字符串
其中notificationHandler是定义的回调函数。

pinkon5k

pinkon5k4#

为了在连接建立后触发通知或回调函数,可以使用PQsetNoticeReceiver函数设置回调函数。当从数据库接收到通知时,将调用该函数。

相关问题