本文へ移動
LICENTIVO / INTEGRATION

デスクトップアプリでフローティングライセンスを管理する方法

フローティング枠は有効なリースを持つハードウェア単位で数えます。同じハードウェアの複数セッションは 1 枠を共有し、ハードウェア識別情報がなければデバイス ID を使います。

セッション ワークフロー · 9 つすべての SDK更新日

1. 同時シート数の制限を設定する

フローティング枠は有効なリースを持つハードウェア単位で数えます。同じハードウェアの複数セッションは 1 枠を共有し、ハードウェア識別情報がなければデバイス ID を使います。

ハートビート間隔とセッション リースを一緒に設定します。リースは、ハートビート間隔に最大ジッターと 30 秒のマージンを加えた値を超える必要があります。リースを短くすると、放棄されたシートがより早く回復されますが、ネットワークの中断はそれほど許容されません。

ライセンスの席数上限とワークスペースのデバイス枠は別の制限です。通常ライセンスもフローティングライセンスも、現在有効なアクティベーションがワークスペースの枠を使用します。

デバイス枠は現在のアクティベーション数で計算し、解除すると返却されます。通常ライセンスはオフラインでも枠を使用し、フローティングライセンスはリース満了時にも自動返却されます。

10 台のデバイスを順次使っても、交換するデバイスを先に解放し、有効なアクティベーションを常に 3 台以内に保てば、消費するデバイス枠は最大 3 です。

2. 起動時にシートを取得する

[コンソール] > [製品] から製品 ID をコピーします。その製品の署名公開鍵を開き、すべてのキー ID/公開鍵のペアを初期化コードに貼り付けて、YOUR_PRODUCT_ID、YOUR_KEY_ID、および YOUR_PUBLIC_KEY を置き換えます。迅速な統合により、これらのパブリック コード定数を生成できます。製品構成ファイルは必要ありません。 SDK のデフォルトは https://www.licentivo.com. です

次の Go フラグメントは、エラーを返すアプリケーション関数に属します。コンテキスト、OS、OS/信号、ログのインポートが必要です。 importReport は既存のビジネス コールバックです。 customerKey はアクティベーション フォームから取得されます。

Go · application lifecycle
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. SDK にハートビートをスケジュールさせます

独自のタイマーを作成したり、並列 HTTP ハートビート リクエストを送信したりしないでください。 SDK は、許可された間隔を使用してセッションを更新します。アプリケーションの実行中はクライアントを存続させます。

すべての保護されたハンドラーに RunFeature を配置します。チェックが拒否された場合は、その保護されたアクションを停止し、ライセンス メッセージを表示します。有用なバックグラウンド接続エラーを表示します。起動チェックによって後の操作が永続的に許可されるとは想定しないでください。

リースの期限切れ、ライセンスの取り消し、またはシートの拒否は、署名された承認ルールによって処理されます。再接続するには、サーバーチェックが成功する必要があります。ローカルの有効期限データを編集してセッションを延長しないでください。

4. 通常の終了時にリリースします。

Close クライアントは通常終了します。 Go は遅延 client.Close() を使用します。 Java と C# はスコープ指定の破棄を持ち、C++ と Rust は破棄を使用し、Python はコンテキスト マネージャーを使用します。 Ruby/JavaScript 公開終了。

シャットダウン中にアプリケーションがクラッシュするかサーバーに接続できない場合、サーバーはセッションのリース期限が切れると放棄されたシートを再利用します。この遅延は予想されるものです。他のユーザーがいつ席が空くかを理解できるように、明確なメッセージを残しておきます。

フローティングライセンスは有効なリースを数えます。切断やクラッシュだけでは直ちに枠は戻らず、最後のセッションの解放またはリース満了が必要です。

5. 2 台の別々のマシンでテストする

  1. テスト ライセンスを 1 つの同時接続枠に設定します。コンピューター A でアプリケーションを起動します。
  2. コンピューター B で開始します。A がシートを保持している間、2 番目の保護されたセッションは拒否される必要があります。
  3. A を通常どおり終了し、B が座席を取得できることを確認します。
  4. 隔離されたテスト環境では、クリーンアップを行わずに A を停止します。構成されたリースの期限が切れた後にシートが戻ることを確認します。

座席の競合のトラブルシューティング

ノードロック モードとフローティング モードでは終了動作が異なります。ノードロック シャットダウンは登録を維持しますが、フローティング シャットダウンはシートを返そうとします。ノードロックされたアプリケーションを閉じるたびに device unbind を呼び出さないでください。

シート使用中メッセージは、別の実行中のインスタンス、またはリースの期限切れを待っている最近クラッシュしたプロセスによって発生する可能性があります。購入したシート数を増やす前に、コンソールで現在のセッションを確認してください。

ファイルベースの最初のアクティベーションは、ノードロック ライセンスの場合です。従量制課金操作では、フローティング セッション自体が有効な場合でも、オンライン予約および決済コールが必要になります。