2016-05-09 4 views
8

Мы хотим отключить наших клиентов с сервера.java Рекомендуемый способ отключения нескольких сеансов пользователя

Итак мы послали несколько сообщений сессий, которые включают в себя в основном некоторые команды, как «закрыть себя» л

Так что в целом я сделать что-то вроде этого:

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

Теперь я хотел бы дайте несколько секунд (скажем, 5), чтобы каждый сеанс закрывался, прежде чем выполнять некоторые методы kill sigterm.

Так что было бы предпочтительным способом:

  1. Выполнение цикла с максимальной задержкой 5 секунд для каждого закрытия сессии процедуры.

    ИЛИ

  2. Start для каждой сессии поток, который делает эту процедуру так, сеансы должны быть закрыты одновременно.

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

Update:

Я заметил, что некоторые пользователи falsly повесили много на слово "Session", проблема не SessionHandling вообще. Если я отправляю закрывающее сообщение или отсоединяю Socket, это не имеет значения. Это не проблема.

Вы можете заменить слово Session на UserThread.

Проблема в том, что мне нужно знать: Закрытие «UserThread» займет некоторое время, поэтому теперь подождите, пока каждый поток будет закрыт, и перейдите к следующему, или запустите для каждого UserThread свое собственное ответное закрытие Поток для работы со всеми нитями одновременно.

+4

Вы можете просто добавить все сеансы в коллекции или очереди, а затем периодически проходить через него, отправляя команды закрытия каждой сессии. Если какой-то сеанс не удалось закрыть - добавьте его обратно в коллекцию. Делайте это до тех пор, пока коллекция не станет пустой или превысит лимит повтора. –

+1

'' sigterm' убить методы ', чтобы убить что? Что такое «сеанс пользователя» в этом сценарии? Что случилось с закрытием сокета? – EJP

+0

Отправляет команду закрытия операцию блокировки или неблокирования? Какое соединение у вас есть на сеансах, которые вы можете выполнить с помощью метода sigterm kill? – Alexander

ответ

1

Отправьте запрос на закрытие сеанса на все сеансы, подождите пять секунд, затем проверьте все сеансы. Таким образом, сеанс закрытия может происходить параллельно, не запуская целую цепочку новых потоков.

+0

Да, это так. – Gobliins

Смежные вопросы