Boa tarde, estou com um projeto em Java que utiliza socket. A comunicação dele ja esta praticamente pronta, mas analisando o codigo me deparei com uma duvida. O meu servidor possui um loop que enquanto tiver vivo vai ler e processar o protocolo que eu criei, na parte do cliente eu nao possuo nenhum loop, mas sim metodos que enviam o protocolo para o servidor e espera a resposta dele.
Ilustrando eu tenho a seguinte estrutura:
Na parte do Servidor:
private void processar() {
do {
try {
processarProtocolo(input.readInt());
} catch (IOException ex) {
isAlive = false;
ex.printStackTrace();
}
} while (isAlive && liberado);
}
Então o cliente envia uma mensagem:
public void enviarOk() {
sendData(() -> {
dos.writeInt(0);
});
}
E o servidor lê o codigo “0” e faz algo, podendo retornar alguma informação ou valor, nesse caso depois do “sendData(() -> { dos.writeInt(0);});” eu coloco um input.read().
Minha duvida é a seguinte, essa é a forma correta de realizar a comunicação cliente/servidor? o servidor sempre com um loop processando e o cliente apenas envia o protocolo e no mesmo metodo aguarda a informação. Eu pensei em criar um loop no servidor e outro loop no cliente, entao nesse caso o cliente envia uma solicitação para o servidor mas nao aguarda o retorno, e o servidor envia uma informação para o cliente e atraves do loop ele processa os dados, porem no caso de uma tabela, por exemplo, o cliente vai solicitar as informações para completar a tabela e vai continuar a executar sem aguardar, o servidor vai processar o pedido e enviar as informações, e atraves do protocolo o cliente vai saber que se trata de dados para completar uma tabela, porem qual tabela? como o programa é grande e tem varias tabelas e telas diferentes, como fazer para enviar os dados para a tela certa?
Qual dos dois é melhor, o loop só no servidor ou um loop no servidor e outro no cliente?
Tambem pensei em uma conexão UDP em paralelo e usar multicast para enviar mensagens do servidor para o cliente ou clientes.
Só para complementar, eu tenho varios produtos em uma tabela e com dois cliques abre uma tela para alterar as informações, usando um loop só no servidor eu consigo completar a tabela, ver os dados e alterar sem problema, mas caso um outro usuario entrar no mesmo produto e alterar uma informação o primeiro nao vai ver a alteração, e no caso de dois loops o servidor poderia mandar uma mensagem com os dados novos e ele decidir atualizar ou nao na interface. Mas não sei qual a melhor pratica nesse caso, e queria seguir o caminho certo para nao precisa alterar o projeto todo do programa mais para a frente.
Agradeço a ajuda.