跳到正文
LICENTIVO / INTEGRATION

以浮動授權限制軟體同時使用人數

允許企業在多台電腦安裝,同時限制使用席位。SDK 取得席位、維持工作階段租約,並在應用程式結束時嘗試釋放。

工作階段流程 · 九種 SDK 通用更新日期

1. 設定同時使用的席位上限

企業有 100 台電腦、購買 10 個同時使用席位時,選擇浮動授權模式,將並行上限設為 10。限制的是使用中工作階段,而非綁定裝置的註冊數量。

一起設定心跳間隔與工作階段租約。租約必須大於心跳間隔、最大隨機抖動及 30 秒緩衝之和。較短租約能更快回收異常席位,但容許的網路中斷也較短。

2. 啟動時取得席位

從官網安裝 SDK,以 product.json 與客戶金鑰建立一個用戶端。浮動啟動必須取得線上授權;儲存的離線快取不能取代工作階段取得。

以下 Go 片段放入回傳 error 的應用程式函式,需匯入 context、os、os/signal 與 log。exportReport 為既有業務回呼,customerKey 來自客戶輸入。

Go · 應用程式生命週期
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. 在兩台不同裝置驗證

  1. 把測試授權設為一個浮動席位,在電腦 A 啟動。
  2. 在電腦 B 啟動,A 占用期間第二個受保護工作階段應被拒絕。
  3. 正常結束 A,再確認 B 可以取得席位。
  4. 在隔離測試環境讓 A 未清理即結束,確認租約到期後席位回收。

排查席位衝突

一般裝置綁定與浮動的結束規則不同:一般結束保留註冊,浮動結束嘗試歸還席位。不要在一般應用程式每次關閉時解除裝置綁定。

席位已占用可能是其他執行個體,或剛崩潰的程序正在等待租約到期。增加購買數量前,先查看控制台的目前工作階段。

檔案首次啟用適用於裝置綁定授權;即使浮動工作階段有效,計次操作仍需線上預留及結算。