1. Establecer un límite de asientos simultáneos
Los puestos flotantes cuentan hardware con concesiones válidas. Las sesiones en el mismo hardware comparten un puesto; si no hay identidad de hardware se usa el ID del dispositivo.
Establezca el intervalo de latido y la concesión de sesión juntos. La concesión debe exceder el intervalo de latido más su fluctuación máxima y un margen de 30 segundos. Un contrato de arrendamiento corto recupera antes los asientos abandonados pero tolera menos interrupciones en la red.
El límite de puestos de licencia y la cuota de dispositivos del espacio de trabajo son límites distintos. Ambos tipos de licencia ocupan cuota por las activaciones actualmente válidas.
La cuota cuenta las activaciones actuales y se recupera al liberarlas. Las licencias normales cuentan sin conexión; las flotantes también liberan cuota al vencer su arrendamiento.
Aunque haya cambiado entre 10 dispositivos, ocupa como máximo 3 unidades si libera primero cada dispositivo sustituido y mantiene como máximo 3 activaciones válidas.
2. Adquirir un asiento al inicio
Copia el ID del producto en Consola > Productos. Abre las claves públicas de firma del mismo producto y pega todos los pares ID de clave/clave pública en el código de inicialización, sustituyendo YOUR_PRODUCT_ID, YOUR_KEY_ID y YOUR_PUBLIC_KEY. La integración rápida puede generar este código. No hace falta un archivo de configuración; el SDK usa https://www.licentivo.com de forma predeterminada.
El siguiente fragmento de Go pertenece a una función de aplicación que devuelve un error. Necesita contexto, sistema operativo, sistema operativo/señal y importaciones de registros. exportReport es la devolución de llamada de su negocio existente; customerKey proviene del formulario de activación.
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. Deje que el SDK programe los heartbeats
No escriba su propio temporizador ni envíe solicitudes de latidos paralelos HTTP. El SDK utiliza el intervalo autorizado y renueva la sesión. Mantenga activo al cliente mientras se ejecuta la aplicación.
Coloque RunFeature en cada controlador protegido. Si se rechaza una verificación, detenga esa acción protegida y muestre un mensaje de licencia. Muestra errores útiles de conexión en segundo plano; No asuma que una verificación de inicio autoriza permanentemente operaciones posteriores.
Un contrato de arrendamiento vencido, una licencia revocada o una denegación de asiento se manejan según las reglas de autorización firmadas. La reconexión requiere una verificación exitosa del servidor. Nunca extienda una sesión editando datos de vencimiento local.
4. Suelte en una salida normal.
Cierre el cliente al salir normalmente. Go utiliza defer client.Close(); Java y C# liberan los recursos al finalizar su ámbito, C++ y Rust utilizan destructores, Python utiliza un administrador de contexto y Ruby y JavaScript ofrecen close.
Si la aplicación falla o no puede comunicarse con el servidor durante el apagado, el servidor reclama el puesto abandonado cuando expira la concesión de sesión. Se espera ese retraso; Mantenga un mensaje claro para que otro usuario entienda cuándo puede haber un asiento disponible.
Las licencias flotantes cuentan las concesiones válidas. Una desconexión o fallo no devuelve capacidad de inmediato: debe liberarse o caducar la última sesión.
5. Pruebe con dos máquinas separadas
- Establezca una licencia de prueba para un asiento flotante. Inicie la aplicación en la computadora A.
- Inicie en la computadora B: la segunda sesión protegida debe denegarse mientras A ocupa el asiento.
- Salga de A normalmente, luego verifique que B pueda adquirir un asiento.
- En el entorno de prueba aislado, detenga A sin limpieza; verifique que el asiento regrese después de que expire el contrato de arrendamiento configurado.
Solución de conflictos de asientos
Los modos de nodo bloqueado y flotante tienen un comportamiento de salida diferente: el cierre de nodo bloqueado mantiene el registro, mientras que el apagado flotante intenta devolver un asiento. No llame al dispositivo para desvincularlo cada vez que se cierre una aplicación con un nodo bloqueado.
Un mensaje de asiento en uso puede deberse a otra instancia en ejecución o a un proceso bloqueado recientemente que estaba esperando a que expire el arrendamiento. Revise las sesiones actuales en la consola antes de aumentar el número de asientos comprados.
La primera activación basada en archivos es para licencias de nodo bloqueado. Las operaciones medidas aún requieren reserva en línea y liquidación de llamadas incluso cuando la sesión flotante en sí es válida.