English
Instant Developer Foundation Documentazione
  • Approfondimenti
  • Server Session

Introduzione alle Server Session

copia link

Introduzione

Un'esigenza frequente nello sviluppo di un'applicazione è quella di svolgere elaborazioni più o meno lunghe che vanno eseguite in background e che non blocchino l'utente che le ha richieste.
Normalmente per sopperire a questa esigenza si utilizza un Servizio Batch che ogni tanto "sbircia" su un database per vedere se qualcuno ha richiesto qualche elaborazione e al termine dell'elaborazione si riporta l'esito sul database.

Ma perché creare un Servizio Batch quando basta lanciare dei Thread lato server?

Per questo nascono le Server Session: per svolgere lato server quello che in precedenza veniva fatto dal Servizio Batch con il vantaggio di poter interagire direttamente con la sessione senza dover passare dal database.

Cos'è e come funziona una ServerSession?

Una Server Session è un thread che viene creato lato server tramite il metodo StartSession che può essere programmato tramite un comando (vedi il parametro QueryString) e che rimane in attesa di messaggi da gestire inviabili tramite il metodo SendSessionMessage finché non viene terminato tramite il metodo EndSession. Inoltre è possibile programmare dei timer che scattano solo lato server tramite il nuovo flag impostabile nella videata delle proprietà dei timer.
In sintesi la vita di una Server Session si può rappresentare così:

Start session
fire Initialize event
if (QueryString.startWith("CMD=")) fire OnCommand event
if (! UserRole) fire OnLogin event
if ( UserRole )
{
  fire AfterLogin event
  while (!session terminated)
  {
    tick server timers
    handle message (fire OnSessionMessage event)
    sleep 50ms
  }
}
fire Terminate event
End session

Avvio automatico di una sessione all'avvio dell'applicazione

Per poter sostituire completamente un servizio batch occorre anche far sì che le elaborazioni possano partire anche senza interazione degli utenti. A questo proposito, attivando il nuovo flag "Avvia Server Session" nella videata delle proprietà dell'applicazione, l'applicazione al suo avvio, cioè quando viene avviato il Web Server, avvia automaticamente una sessione con il nome corrispondente alla propria MainCaption. Questa sessione, come tutte le sessioni avviate dall'utente, continuerà il suo ciclo di vita finché non viene terminata o dall'utente o dal sistema quando viene fermato il Web Server.

Note

  • N.B.Le sessioni server sono condivise da tutti gli utenti, per cui possono essere usate anche per scambiare informazioni tra gli utenti. Ogni applicazione ha il suo pool di sessioni attive: se un'utente termina una sessione tutti gli utenti potranno conoscere che quella sessione è terminata. Viceversa se un utente ha avviato una sessione con un certo nome, gli altri utenti non possono creare altre sessioni con lo stesso nome.
  • N.B.Quando si comunica con una ServerSession è altamente sconsigliato passare come parametri dei messaggi delle istanze di oggetti per evitare conflitti di multi-threading; è consigliato altresì di serializzare gli oggetti in xml.
  • Le sessioni server lavorano in modalità RD0.
  • Nel codice che si scrive per le sessioni server occorre tenere presente che non c'é una richiesta del browser, per cui funzioni come BrowserInfo e UserAgent non sono utilizzabili.

Ultima modifica: 03/05/2021 / Validità: da 9.5.4160

Vedi anche

  • Start Session (funzione)
  • Send Session Message (funzione)
  • Initialize (evento)
  • End Session (funzione)
  • On Command (evento)
  • On Session Message (evento)
  • Terminate (evento)
  • Main Caption (proprietà)
  • Browser Info (funzione)
  • User Agent (funzione)
  • User Role (proprietà)
  • On Login (evento)
  • After Login (evento)