Tài liệu này dành cho phiên bản không được hỗ trợ của 스포츠 토토.
Bạn có thể muốn xem cùng một trang cho토토 커뮤니티 : 문서 : 17 : 32.9. 비동기 알림Phiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

31.7. Thông báo không đồng bộ

스포츠 토토Ưu đãi Thông báo không đồng bộ quaNgheThông báolệnh. Một phiên khách đăng ký sự quan tâm của nó đối với một kênh thông báo cụ thể với Thenghelệnh (và có thể dừng lắng nghe vớiUnlistenlệnh). Tất cả các phiên nghe trên một kênh cụ thể sẽ được thông báo không đồng bộ khi aThông báoLệnh với tên kênh đó được thực hiện bởi bất kỳ phiên nào. MỘT"tải trọng"Chuỗi có thể được truyền để giao tiếp dữ liệu bổ sung cho người nghe.

libpqỨng dụng gửiNghe, UnlistenThông báoCác lệnh như các lệnh SQL thông thường. Sự xuất hiện củaThông báoTin nhắn sau đó có thể được phát hiện bởi Gọipqnotifyes.

hàmpqnotifyesTrả về Thông báo tiếp theo từ danh sách thông báo chưa được xử lý Tin nhắn nhận được từ máy chủ. Nó trả về một con trỏ null nếu Không có thông báo đang chờ xử lý. Khi một thông báo là đã trở về từpqnotifyes, đó là được coi là xử lý và sẽ bị xóa khỏi danh sách Thông báo.

pgnotify *pqnotifyes (pgconn *Conn);

typedef struct pgnotify

    char *relname;              / * Tên kênh thông báo */
    int be_pid;                / * Quy trình ID thông báo quy trình máy chủ */
    char *thêm;                / * Chuỗi tải trọng thông báo */
 Pgnotify;

Sau khi xử lý ApgnotifyĐối tượng Được trả về bởipqnotifyes, Hãy chắc chắn để Miễn phí nó vớipqfreemem. Nó là đủ để giải phóngpgnotifyCon trỏ; TherelnameExtraTrường không đại diện cho riêng biệt phân bổ. (Tên của các lĩnh vực này là lịch sử; trong đặc biệt, tên kênh không cần phải làm gì với Tên quan hệ.)

Ví dụ 31-2Đưa ra một chương trình mẫu minh họa cho việc sử dụng không đồng bộ thông báo.

pqnotifyesKhông thực sự Đọc dữ liệu từ máy chủ; nó chỉ trả về tin nhắn trước đó được hấp thụ bởi người kháclibpqHàm. Trong các bản phát hành trước củalibpq, Cách duy nhất để đảm bảo biên lai kịp thời củaThông báoTin nhắn liên tục Gửi các lệnh, thậm chí các lệnh trống, sau đó kiểm trapqnotifyessau mỗiPQEXEC. Trong khi điều này vẫn hoạt động, nó là không được lãng phí sức mạnh xử lý.

Cách tốt hơn để kiểm traThông báoTin nhắn Khi bạn không có lệnh hữu ích để thực thi là gọiPQConsumeInput, sau đó kiểm trapqnotify. Bạn có thể sử dụngselect ()Để chờ dữ liệu đến từ máy chủ, do đó không sử dụngCPUsức mạnh trừ khi có việc gì đó. (Nhìn thấyPQSocketĐể lấy tệp Số mô tả để sử dụng vớiselect ().) Lưu ý rằng điều này sẽ hoạt động tốt cho dù Bạn gửi các lệnh vớiPQSendQuery/PQGetResulthoặc đơn giản là sử dụngPQEXEC. Tuy nhiên, bạn nên nhớ kiểm trapqnotifyessau mỗiPQGetResulthoặcPQEXEC, để xem có bất kỳ thông báo nào được đưa vào Trong quá trình xử lý lệnh.