33.8. 비동기 알림

와이즈 토토듣기andNotify명령. 클라이언트 세션은 특정 알림 채널에 대한 관심을듣기명령 (그리고Unlisten명령). 특정 채널에서 듣는 모든 세션은 A 일 때 비동기 적으로 알림을받습니다.Notify해당 채널 이름을 가진 명령은 모든 세션에서 실행됩니다. 에이Payload문자열을 전달하여 추가 데이터를 청취자에게 전달할 수 있습니다.

libpq신청서 제출듣기, UnlistenNotify일반 SQL 명령으로 명령. 의 도착Notify전화로 메시지를 감지 할 수 있습니다pqnotifies.

함수pqnotifies서버에서받은 처리되지 않은 알림 메시지 목록에서 다음 알림을 반환합니다. 보류중인 알림이없는 경우 널 포인터를 반환합니다. 알림이 반환되면pqnotifies, 그것은 처리 된 것으로 간주되며 알림 목록에서 제거됩니다.

pgnotify *pqnotifies (pgconn *conn);

typedef struct pgnotify

    char *relname;              / * 알림 채널 이름 */
    int be_pid;                / * 서버 프로세스 알림의 프로세스 ID */
    char *엑스트라;                / * 알림 페이로드 문자열 */
 pgnotify;

처리 후pgnotify개체에 의해 반환pqnotifiesPQFREEMEM. 를 해방시키기에 충분합니다pgnotify포인터; 그만큼Relname추가필드는 별도의 할당을 나타내지 않습니다. (이 분야의 이름은 역사적입니다. 특히 채널 이름은 관계 이름과 관련이 없습니다.)

예 33.2비동기 알림 사용을 보여주는 샘플 프로그램을 제공합니다.

pqnotifies실제로 서버에서 데이터를 읽지 않습니다. 이전에 다른 사람이 흡수 한 메시지를 반환합니다libpq함수. 고대 릴리스에서libpq, 적시에 수령하는 유일한 방법Notify메시지는 끊임없이 명령, 심지어 비어있는 명령을 제출 한 다음 확인하는 것입니다pqnotifies각각PQEXEC. 이것은 여전히 ​​작동하지만 처리 능력 낭비로 더 이상 사용되지 않습니다.

확인하는 더 좋은 방법Notify유용한 명령이없는 경우 전화하는 것입니다pqconsumeInput, checkpqnotifies. 사용할 수 있습니다select ()서버에서 데이터가 도착하기를 기다리려면 NOCPU할 일이 없다면 힘. (보다pqsocket|select ().) 이것은 명령을 제출하든이 작동합니다.pqsendquery/pqgetresult또는 간단히 사용PQEXEC. 그러나 확인해야합니다pqnotifies각각pqgetresult또는PQEXEC, 명령 처리 중에 알림이 들어 있는지 확인하려면

정정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면