토토 커뮤니티제안 를 통한 비동기 알림듣기andNotify명령. 클라이언트 세션 특정 알림 조건에 대한 관심을 등록합니다 와 함께듣기명령 (그리고 중지 할 수 있습니다 와 함께 듣기Unlisten명령). 특정 조건에서 듣는 모든 세션이 알림을받습니다. a 때 비동기 적으로Notify명령 해당 조건으로 이름은 모든 세션에서 실행됩니다. 아니요 추가 정보는 알림에서 경청자. 따라서 일반적으로 필요한 실제 데이터 통신은 데이터베이스 테이블을 통해 전송됩니다. 천하게, 조건 이름은 관련 테이블과 동일하지만 관련 테이블이있을 필요가 없습니다.
libpq신청서 제출듣기andUnlisten일반 SQL 명령으로 명령. 그만큼
도착Notify메시지가 가능합니다
이후에 전화하여 감지pqnotifies
.
함수pqnotifies
반환
처리되지 않은 알림 목록에서 다음 알림
서버에서받은 메시지. IF가 널 포인터를 반환합니다
보류중인 알림이 없습니다. 일단 알림이 있습니다
에서 반환pqnotifies
처리 된 것으로 간주되고 목록에서 제거됩니다.
알림.
pgnotify *pqnotifies (pgconn *conn); typedef struct pgnotify char *relname; / * 알림 조건 이름 */ int be_pid; / * 서버 프로세스의 프로세스 ID */ char *엑스트라; / * 알림 매개 변수 */ pgnotify;
처리 후pgnotify개체
반품pqnotifies
로 무료PQFREEMEM
. 그것은
자유를 해방시키기에 충분합니다pgnotify포인터; 그만큼Relnameand추가필드는 별도를 나타내지 않습니다
할당. (현재추가필드는 사용되지 않았으며 항상 빈 문자열을 가리 킵니다.)
참고 :in토토 커뮤니티6.4 이상,be_pid알림 서버의 것입니다 프로세스, 이전 버전에서는 항상였습니다.PID자신의 서버 프로세스.
예 28-2비동기식의 사용을 보여주는 샘플 프로그램 제공 공고.
pqnotifies
실제로는 그렇지 않습니다
서버에서 데이터를 읽습니다. 이전에 메시지를 반환합니다
다른 사람에 의해 흡수libpq함수. 이전 릴리스에서libpq, 적시에 영수증을 보장하는 유일한 방법입니다
의Notify메시지는 지속적으로 사용되었습니다
명령을 제출하고, 심지어 비어있는 명령을 제출 한 다음pqnotifies
각각PQEXEC
. 이것이 여전히 작동하는 동안, 그것은입니다
처리 전력 낭비로 더 이상 사용되지 않습니다.
확인하는 더 좋은 방법Notify유용한 명령이없는 경우 메시지를 호출하는 것입니다pqconsumeInput
, 확인pqnotifies
. 사용할 수 있습니다select ()
데이터가 도착할 때까지 기다립니다
서버에서 NO 사용CPU할 일이 없다면 힘.
(보다pqsocket
파일을 얻으려면
다음과 함께 사용할 설명 자 번호select ()
.) 이것은 작동하는지 여부에 유의하십시오
당신은로 명령을 제출합니다.pqsendquery
/pqgetresult
또는 간단히 사용PQEXEC
. 그러나 확인해야합니다pqnotifies
각각 이후15523_15536
또는PQEXEC
, 알림이 들어 있는지 확인하십시오
명령 처리 중에.