1. Imposta un limite di posti simultanei
I posti flottanti contano l’hardware con concessioni valide. Le sessioni sullo stesso hardware condividono un posto; se l’identità hardware manca si usa l’ID dispositivo.
Imposta insieme l'intervallo di heartbeat e il lease della sessione. Il lease deve superare l'intervallo di heartbeat più il jitter massimo e un margine di 30 secondi. Un lease breve recupera prima i posti abbandonati ma tollera meno interruzioni della rete.
Il limite di posti della licenza e la quota dispositivi dello spazio di lavoro sono limiti distinti. Entrambi i tipi di licenza occupano la quota per le attivazioni attualmente valide.
La quota conta le attivazioni correnti e viene restituita al rilascio. Le licenze ordinarie contano anche offline; quelle flottanti restituiscono la quota anche alla scadenza del lease.
Anche passando da 10 dispositivi, si occupano al massimo 3 quote se ogni dispositivo sostituito viene prima rilasciato e restano al massimo 3 attivazioni valide.
2. Acquisire un posto all'avvio
Copia l’ID prodotto da Console > Prodotti. Apri le chiavi pubbliche di firma dello stesso prodotto e inserisci tutte le coppie ID chiave/chiave pubblica nel codice di inizializzazione, sostituendo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. L’integrazione rapida può generare il codice. Non serve un file di configurazione; l’SDK usa https://www.licentivo.com per impostazione predefinita.
Il seguente frammento Go appartiene a una funzione dell'applicazione che restituisce un errore. Richiede contesto, sistema operativo, sistema operativo/segnale e importazioni di log. exportReport è la tua callback aziendale esistente; customerKey proviene dal modulo di attivazione.
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. Lascia che SDK pianifichi i heartbeat
Non scrivere il proprio timer né inviare richieste parallele di heartbeat HTTP. Lo SDK utilizza l'intervallo autorizzato e rinnova la sessione. Mantieni attivo il client mentre l'applicazione è in esecuzione.
Posiziona RunFeature in ogni gestore protetto. Se un controllo viene negato, interrompi l'azione protetta e mostra un messaggio di licenza. Visualizza utili errori di connessione in background; non dare per scontato che un controllo all'avvio autorizzi in modo permanente le operazioni successive.
Un lease scaduto, una licenza revocata o il rifiuto di una postazione vengono gestiti dalle regole di autorizzazione firmate. La riconnessione richiede un controllo del server riuscito. Non estendere mai una sessione modificando i dati di scadenza locali.
4. Rilasciare con un'uscita normale
Chiudi il client alla normale uscita dall’applicazione. Go usa defer client.Close(); Java e C# gestiscono il rilascio all’interno di un ambito, C++ e Rust usano i distruttori, Python usa un gestore di contesto e Ruby e JavaScript espongono close.
Se l'applicazione si arresta in modo anomalo o non riesce a contattare il server durante l'arresto, il server recupera la postazione abbandonata alla scadenza del lease della sessione. Questo ritardo è previsto; mantieni un messaggio chiaro in modo che un altro utente capisca quando un posto potrebbe diventare disponibile.
Le licenze flottanti contano le concessioni valide. Disconnessioni o arresti anomali non liberano subito la quota: deve essere rilasciata o scadere l’ultima sessione.
5. Testare con due macchine separate
- Imposta una licenza di prova su una postazione mobile. Avviare l'applicazione sul computer A.
- Avviare sul computer B: la seconda sessione protetta deve essere negata mentre A mantiene la postazione.
- Esci da A normalmente, quindi verifica che B possa acquisire un posto.
- Nell'ambiente di test isolato, interrompere A senza pulizia; verificare la restituzione del posto dopo la scadenza del lease configurato.
Risoluzione dei problemi relativi ai conflitti tra posti
Le modalità con nodo bloccato e mobile hanno un comportamento di uscita diverso: l'arresto con nodo bloccato mantiene la registrazione, mentre l'arresto mobile tenta di restituire un posto. Non chiamare lo svincolo del dispositivo ogni volta che si chiude un'applicazione con nodo bloccato.
Un messaggio di postazione in uso può essere causato da un'altra istanza in esecuzione o da un processo recentemente arrestato in modo anomalo in attesa della scadenza del lease. Rivedi le sessioni correnti nella console prima di aumentare il numero di postazioni acquistate.
La prima attivazione basata su file riguarda le licenze con nodo bloccato. Le operazioni a consumo richiedono comunque la prenotazione online e il regolamento delle chiamate anche quando la sessione mobile stessa è valida.