2016-05-09 13 views
8

Vogliamo disconnettere i nostri client dal server.java modo consigliato per arrestare più sessioni utente

così abbiamo inviato alcuni messaggi alle sessioni, che includono fondamentalmente alcuni comandi come "chiudere te" l

Quindi, in generale che faccio qualcosa di simile:

for (Session session : sessions) { 
     closeSession(session); 
     while(!verifyClosed(session)){ 
      closeSession(session); 
      retries++; 
      if(retries==10){ 
       retries = 0; 
       break; 
      } 
     }; 
    } 

Ora vorrei dare qualche secondo (diciamo 5) per ogni sessione per chiudersi prima di eseguire alcuni metodi di kill sigterm.

Quindi, quale sarebbe il modo preferito:

  1. Facendo il ciclo con un massimo di 5 secondi di ritardo per ogni stretta procedura di sessione.

    O

  2. avvio per ogni sessione un filo che fa questo procedimento così le sessioni devono essere chiusi contemporaneamente.

    for (Session session : sessions) { 
        startClosingThread(session); 
    } 
    

Aggiornamento:

Ho notato che alcuni utenti falsly appeso a molto sulla parola "Session", il problema non è la SessionHandling a tutti. Se invio un messaggio di chiusura o disconnetto lo zoccolo non ha importanza. Questo non è il problema.

È possibile sostituire la parola Sessione con UserThread.

Il problema per quello che ho bisogno di un consiglio è: La chiusura di un "UserThread" richiederà del tempo, quindi ora attendi che ogni thread sia chiuso e passi a quello successivo, o inizi per ogni UserThread il proprio ripetibile Closing Thread per lavorare su tutti i thread contemporaneamente.

+4

È possibile aggiungere semplicemente tutte le sessioni in entrata o in coda, quindi attraversarlo periodicamente, inviando comandi di chiusura a ciascuna sessione. Se qualche sessione non è riuscita a chiuderla, aggiungila nuovamente nella raccolta. Fallo finché la raccolta non è vuota o il limite dei tentativi supera. –

+1

"metodi di uccisione sigterm' per uccidere cosa? Che cos'è una "sessione utente" in questo scenario? Cosa c'è che non va semplicemente chiudendo la presa? – EJP

+0

L'invio del comando di chiusura è un'operazione di blocco o non bloccante? Che tipo di connessione hai alle sessioni che puoi fare un metodo di uccisione sigterm? – Alexander

risposta

1

Inviare la richiesta di chiusura sessione su tutte le sessioni, attendere i cinque secondi, quindi controllare tutte le sessioni. In questo modo la sessione si chiude può avvenire in parallelo senza iniziare un sacco di nuovi thread.

+0

Sì, è così – Gobliins

Problemi correlati