30. Nio (selecione (lidar com a desconexão do cliente (com evento de leitura)))

Nio (selecionar (lidar com a desconexão do cliente (com evento de leitura)))

Antes de tudo, precisamos ter um entendimento: se nosso cliente for forçado a parar ou desconectado normalmente, um evento de leitura será acionado (somente o valor retornado por read que é desconectado normalmente é -1)

Etapa 1: Paramos o cliente à força

 

Ocorreu uma exceção no servidor (porque nosso cliente foi forçado a fechar e nosso cliente terá uma exceção io se quiser ler novamente)

 

Passo 2: Método de processamento (vamos tentar capturar a exceção primeiro) ctrl+alt+T tecla de atalho

 

 

Neste momento, o servidor está em execução, mas o servidor não parou

 

Porque após capturarmos a exceção, a exceção entrará no loop externo e um evento de leitura será acionado após o cliente ser forçado a parar (entrando em nossa coleção), mas não processamos essa chave. Se não houver processamento, o método select não será bloqueado (executando o tempo todo)

Etapa 3: otimizar novamente (vamos excluir essa chave da coleção)

 

Não há problema aqui, nosso aqui é imprimir uma exceção (e.printS...)

 

Passo 4: Existe outro problema, o cliente é desconectado normalmente (o servidor não pode parar), pois também vamos gerar um evento de leitura quando desconectado normalmente, e não será pego pela exceção, então essa chave normal não irá deletado

 

Otimização: distinguimos entre desconexão normal e desconexão anormal. A maneira de pensar é que, quando desconectamos normalmente, leia retorna -1 para julgar

 

 

Acho que você gosta

Origin blog.csdn.net/logtcm4/article/details/127820967
Recomendado
Clasificación