Saat ini dalam pengujian: kode GitHub akan dibuka setelah selesai.

Library C/C++ Ticketing ​

GitHub

Belum terdaftar di registry resmi vcpkg — persyaratan pengajuannya ketat dan pendaftaran masih berlangsung. Untuk saat ini, clone repositori Github di atas dan build sendiri.

Repositori ​

bash

Contoh ​

Contoh Dasar ​

Buat satu broker saat aplikasi mulai dan gunakan bersama. wait=0 adalah satu percobaan langsung tanpa queue, maksimum 255 detik; lease 1–250 detik. Minimum-work budget terakhir wajib dan boleh nol. Pecahan detik dibulatkan ke atas; nilai di luar rentang atau budget di atas lease ternormalisasi ditolak sebelum kirim, tidak pernah di-clamp.

c
#include <ticketing/ticketing.h>

const char *addrs[] = {"127.0.0.1:5225"};
ticketing_broker *broker = ticketing_connect(addrs, 1);
ticketing_wait_ready(broker, 5);

ticketing_ticket *ticket = NULL;
if (ticketing_acquire(broker, "key", 5.0, 30.0, 2.0, &ticket) == TICKETING_OK) {
    uint64_t token = ticketing_ticket_token(ticket);
    /* In the same DB transaction: verify/update token high-water and perform the business write. */
    ticketing_release(ticket, NULL);
}

Close/drop otomatis adalah bounded best-effort release. Gunakan explicit release API bila hasil penting. Token wajib melakukan fencing pada DB write terlindungi di transaction yang sama.

Perilaku yang Perlu Diketahui ​

  • Jika satu request byte mungkin terkirim, hilangnya respons final menghasilkan Indeterminate. A tidak otomatis dikirim ulang dengan owner yang sama; caller tidak masuk critical section.
  • Cancel sebelum send adalah unsent; setelah possible-send menutup session. Jika grant token diparse bersamaan, dilakukan bounded compensating exact-token release.
  • M, semua E, dan response malformed/oversized/unknown adalah session-fatal. Acquire possible-send yang belum pasti menjadi Indeterminate.
  • B adalah capacity rejection pasti dan langsung dikembalikan. Tanpa retry internal; caller dapat memulai acquire baru dengan owner baru setelah application backoff.
  • Explicit/compensating release mencoba exact token hanya selama 5 detik absolut sejak call/enqueue. R sukses, N sudah hilang/bukan current; tanpa respons final adalah error, bukan diasumsikan sukses.
  • Ticket hanya diberikan dengan sisa waktu konservatif positif yang cukup untuk work budget. Work di atas 250 detik unsupported sebelum kirim.
  • DB fencing dengan token wajib: dalam transaction yang sama tolak token <= stored_high_water, perbarui high-water dan lakukan business write sebelum commit/rollback dan release.

Opsi Keamanan (Token · TLS) ​

Semua opsi bersifat opsional. token harus cocok dengan client_tokens di server, dan TLS punya empat mode: off / system trust store / CA tertentu / lewati verifikasi (khusus test).

c
const char *addrs[] = {"10.0.0.1:5225", "10.0.0.2:5225", "10.0.0.3:5225"};
ticketing_options options = {
    .token = "123",
    .tls = "system-roots", /* NULL(off) | "insecure-skip-verify" | path ke file CA */
};
ticketing_result error;
ticketing_broker *broker = ticketing_connect_with(addrs, 3, &options, &error);

Konfigurasi token, TLS, dan cluster di sisi server bisa dibuat di halaman Deployment Server Ticketing.