1. Tetapkan batas kursi secara bersamaan
Kursi mengambang menghitung perangkat keras dengan sewa valid. Sesi pada perangkat keras yang sama berbagi satu kursi; jika identitas perangkat keras tidak tersedia, dipakai ID perangkat.
Atur interval detak jantung dan sewa sesi bersama-sama. Sewa harus melebihi interval detak jantung ditambah jitter maksimum dan margin 30 detik. Sewa jangka pendek akan memulihkan kursi yang terbengkalai lebih cepat namun mentoleransi lebih sedikit gangguan jaringan.
Batas kursi lisensi dan kuota perangkat ruang kerja adalah dua batas terpisah. Lisensi biasa dan mengambang memakai kuota untuk aktivasi yang saat ini valid.
Kuota menghitung aktivasi saat ini dan kembali setelah dilepas. Lisensi biasa tetap dihitung saat luring; lisensi mengambang juga mengembalikan kuota ketika sewanya berakhir.
Walau sudah berganti di antara 10 perangkat, pemakaian kuota paling banyak 3 jika perangkat yang diganti dilepas lebih dahulu dan aktivasi valid selalu paling banyak 3.
2. Dapatkan kursi saat startup
Salin ID produk dari Konsol > Produk. Buka kunci publik penandatanganan produk yang sama, lalu masukkan semua pasangan ID kunci/kunci publik ke kode inisialisasi untuk mengganti YOUR_PRODUCT_ID, YOUR_KEY_ID, dan YOUR_PUBLIC_KEY. Integrasi cepat juga dapat menghasilkan kode ini. Tidak perlu berkas konfigurasi; SDK memakai https://www.licentivo.com secara bawaan.
Fragmen Go berikut termasuk dalam kesalahan pengembalian fungsi aplikasi. Perlu impor konteks, os, os/sinyal, dan log. eksporReport adalah panggilan balik bisnis Anda yang ada; customerKey berasal dari formulir aktivasi.
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
client, err := licentivo.OpenProduct(ctx, productID, trustedKeys, customerKey,
func(err error) { log.Printf("License refresh: %v", err) })
if err != nil {
return err // Show an activation error; do not start protected work.
}
defer client.Close() // Attempts to return a floating seat.
// Place this check inside each protected action, not only at startup.
if err := client.RunFeature("export", exportReport); err != nil {
return err
}
<-ctx.Done()3. Biarkan SDK menjadwalkan detak jantung
Jangan menulis pengatur waktu Anda sendiri atau mengirim permintaan detak jantung HTTP secara paralel. SDK menggunakan interval resmi dan memperbarui sesi. Jaga agar klien tetap hidup saat aplikasi sedang berjalan.
Tempatkan RunFeature di setiap handler yang dilindungi. Jika pemeriksaan ditolak, hentikan tindakan yang dilindungi tersebut dan tampilkan pesan lisensi. Menampilkan kesalahan koneksi latar belakang yang berguna; jangan menganggap pemeriksaan startup secara permanen mengotorisasi operasi selanjutnya.
Sewa yang sudah habis masa berlakunya, pencabutan lisensi, atau penolakan kursi ditangani oleh aturan otorisasi yang ditandatangani. Menghubungkan kembali memerlukan pemeriksaan server yang berhasil. Jangan pernah memperpanjang sesi dengan mengedit data kedaluwarsa lokal.
4. Lepaskan pada jalan keluar normal
Tutup klien saat aplikasi keluar secara normal. Go menggunakan defer client.Close(); Java dan C# melepaskan sumber daya saat lingkup berakhir, C++ dan Rust menggunakan destruktor, Python menggunakan pengelola konteks, sedangkan Ruby dan JavaScript menyediakan close.
Jika aplikasi crash atau tidak dapat menghubungi server selama shutdown, server mendapatkan kembali kursi yang ditinggalkan ketika sewa sesinya berakhir. Penundaan itu diperkirakan terjadi; simpan pesan yang jelas sehingga pengguna lain memahami kapan kursi tersedia.
Lisensi mengambang menghitung sewa valid. Putus jaringan atau aplikasi mogok tidak langsung mengembalikan kuota; sesi terakhir harus dilepas atau sewanya berakhir.
5. Uji dengan dua mesin terpisah
- Tetapkan lisensi pengujian ke satu kursi terapung. Jalankan aplikasi di komputer A.
- Mulai di komputer B: sesi perlindungan kedua harus ditolak saat A memegang kursi.
- Keluar dari A secara normal, lalu verifikasi B dapat memperoleh kursi.
- Di lingkungan pengujian yang terisolasi, hentikan A tanpa pembersihan; verifikasi pengembalian kursi setelah masa sewa yang dikonfigurasi berakhir.
Memecahkan masalah konflik kursi
Mode node-locked dan floating memiliki perilaku keluar yang berbeda: shutdown yang dikunci node tetap melakukan registrasi, sedangkan floating shutdown mencoba mengembalikan kursi. Jangan panggil pelepasan ikatan perangkat setiap kali aplikasi yang dikunci node ditutup.
Pesan seat-in-use dapat disebabkan oleh instance lain yang sedang berjalan atau proses crash yang baru saja menunggu masa sewa berakhir. Tinjau sesi saat ini di konsol sebelum menambah jumlah kursi yang dibeli.
Aktivasi pertama berbasis file adalah untuk lisensi yang dikunci node. Operasi terukur masih memerlukan reservasi online dan penyelesaian panggilan meskipun sesi mengambang itu sendiri valid.