1. 設定同時使用的席位上限
企業有 100 台電腦、購買 10 個同時使用席位時,選擇浮動授權模式,將並行上限設為 10。限制的是使用中工作階段,而非綁定裝置的註冊數量。
一起設定心跳間隔與工作階段租約。租約必須大於心跳間隔、最大隨機抖動及 30 秒緩衝之和。較短租約能更快回收異常席位,但容許的網路中斷也較短。
2. 啟動時取得席位
從官網安裝 SDK,以 product.json 與客戶金鑰建立一個用戶端。浮動啟動必須取得線上授權;儲存的離線快取不能取代工作階段取得。
以下 Go 片段放入回傳 error 的應用程式函式,需匯入 context、os、os/signal 與 log。exportReport 為既有業務回呼,customerKey 來自客戶輸入。
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
client, err := licentivo.OpenWithLicense(ctx, "product.json", 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. 由 SDK 安排心跳
無須自行撰寫計時器或平行傳送 HTTP 心跳。SDK 依授權間隔續租工作階段;應用程式執行期間保留用戶端。
每個受保護操作皆使用 RunFeature。檢查被拒絕時停止操作並顯示授權提示;背景連線錯誤也應可查看。不能認為啟動成功即永久允許後續操作。
工作階段到期、授權撤銷或席位拒絕依簽章授權規則處理。重新連線需要伺服器成功檢查,不可修改本機到期資訊延長工作階段。
4. 正常結束時釋放
正常結束時關閉用戶端。Go 使用 defer client.Close();Java 與 C# 提供範圍釋放,C++ 與 Rust 使用解構,Python 使用情境管理器,Ruby 與 JavaScript 提供 close。
程序崩潰或結束時無法連線,伺服器會在工作階段租約到期後回收席位。這段等待是預期行為,應提示其他使用者可能需要等待席位回收。
5. 在兩台不同裝置驗證
- 把測試授權設為一個浮動席位,在電腦 A 啟動。
- 在電腦 B 啟動,A 占用期間第二個受保護工作階段應被拒絕。
- 正常結束 A,再確認 B 可以取得席位。
- 在隔離測試環境讓 A 未清理即結束,確認租約到期後席位回收。
排查席位衝突
一般裝置綁定與浮動的結束規則不同:一般結束保留註冊,浮動結束嘗試歸還席位。不要在一般應用程式每次關閉時解除裝置綁定。
席位已占用可能是其他執行個體,或剛崩潰的程序正在等待租約到期。增加購買數量前,先查看控制台的目前工作階段。
檔案首次啟用適用於裝置綁定授權;即使浮動工作階段有效,計次操作仍需線上預留及結算。