Java NIO (E/S sem bloqueio) com exemplo de servidor-cliente – java.nio.ByteBuffer e channels.Selector – Java NIO Vs. IO

Publicados: 2021-08-06
Java NIO (I:O sem bloqueio) com exemplo de servidor-cliente - CrunchifyNIOServer.java

Java NIO é meu tópico favorito. Eu tenho trabalhado com o NIO desde os últimos 2 anos e gostaria de compartilhar um Server-Client code para meus leitores que estão livres para usar este código em seu ambiente de produção.

A partir do JDK 1.4, o NIO foi criado para permitir que todos os programadores Java implementassem entrada/saída de alta velocidade sem ter que lidar com código nativo personalizado. O NIO usa a biblioteca java.nio.buffer em comparação com a E/S simples que drena e preenche o buffer internamente de qualquer sistema operacional.

Neste tutorial, veremos as bibliotecas java.nio.channels e java.nio.channels.Selector .

  • os channels representam conexões com entidades capazes de realizar operações de E/S, como arquivos e soquetes; define seletores , para operações de E/S multiplexadas e sem bloqueio.
  • selector pode ser criado invocando o open method desta classe, que usará o provedor de seletor padrão do sistema para criar um novo seletor.
Explicação do pacote java.nio com detalhes da API

Se você tem below questions então você está no lugar certo:

  • Como começar com Java NIO
  • O que são os tutoriais Java NIO e Java NIO
  • Java assíncrono NIO
  • Qual é o uso exato do pacote java nio
  • Tutorial Java NIO
  • Como implementar E/S de alto desempenho com Java NIO

Vamos começar:

Passo 1

  • Crie CrunchifyNIOServer.java que abre a conexão na port 1111
  • use isAcceptable() para verificar se o canal está pronto para aceitar uma nova conexão de soquete
    • Se sim - conecte-o
  • use isReadable() para verificar se o canal está pronto para leitura
    • se sim – leia do buffer e imprima no console do Eclipse
  • Depois de obter o sobrenome da empresa “crunchify”
    • conexão próxima

Passo 2

  • Crie CrunchifyNIOClient.java que tenta se conectar ao servidor na port 1111
  • Criar ArrayList com 5 nomes de empresas
  • Iterar por ArrayList e enviar cada companyName para o servidor
  • Fechar a conexão após o término da tarefa

Dê uma olhada neste código Java:

Código do servidor – CrunchifyNIOServer.java


Código do cliente – CrunchifyNIOClient.java

Java NIO (I:O sem bloqueio) com exemplo de servidor-cliente - CrunchifyNIOClient.java

Resultado no lado do servidor:

Resultado no lado do cliente:


Algumas perguntas frequentes:

  1. Do cliente, como mantenho uma conexão persistente?
    • Você pode usar socket.setKeepAlive(true); ter conexões vivas do lado do cliente.
  2. Como leio uma resposta à mensagem que envio ao servidor. O servidor continua gerando mensagens a cada 10 segundos. Eu só preciso ler a resposta ao meu pedido. Pelo que entendi, o TCP “transmite” dados em vez de fim de registro, etc.
    • Para comunicação cliente-servidor, um protocolo precisa ser bem definido. A chamada readLine() será bloqueada até que todos os dados sejam retornados, portanto, não a use. Try reading bytes from the stream until -1 is returned.

Deixe-me saber se isso funciona.