Enviar mensagens Intervaladas UDP/TCP - Java - Portugal-a-Programar
Enviar mensagens Intervaladas UDP/TCP
By davide92, November 1, 2013 in Java
Boas a todos tenho dois servidores que comunicam entre si, e um cliente que se liga a um dos dois dependendo do load que eles têm. Como é que eu posso fazer para digamos o servidor A enviar para o servidor B de 5 em 5 min(por exemple) uma mensagem neste caso udp com o seu load ?
load = memoria utilizada no sistema
PS: Penso que para os dois ou mais servidores comunicarem entre si é por UDP ou é melhor TCP ?
Edited November 1, 2013 by davide92
crias um timer que irá executar um TimerTask.
Obrigado e já agora em relação ao envio é melhor UDP ou TCP para estes casos ?
a escolha recai sempre em informação que não apresentaste
- necessidade de fiabilidade de notificação
- capacidade de recuperação de mensagens perdidas
- rapidez de transmissão necessária
Neste caso seria necessário ser rápido, e ter a certeza que se o outro servidor estiver a trabalhar que ele receba a informação.
se queres ter a certeza ... TCP
Se tiveres tempo para desenvolver e precisas de espremer todo o bocado de performance: UDP
Mas tens que fazer mais à medida do teu sistema e soluções genéricas não farão sentido para aproveitar a vantagem.
Edited November 4, 2013 by brunoais
Então e por exemplo tenho um servidor A à espera que um cliente A se ligue para receber uma tabela(do servidor A). Como posso fazer para o servidor enviar mensagem com o seu load para outro servidor sem atrapalhar a recepção de clientes ?
Eu tenho este servidor criado para enviar datas:
public DateServer() throws Exception {
dateServer = new ServerSocket(3000);
System.out.println("Server listening on port 3000.");
E como é que aqui posso meter o Timer e o respectivo TimerTask ?
Edited November 8, 2013 by davide92
isso já uma questão completamente diferente.
a solução mais convencional é com threads, sabes o que é ?
Sim sei, já usei num trabalho parecido. Uso uma thread para ligações TCP com os clientes, outra para ligações UDP com os servidores front end e outra para uma ligação UDP com o servidor back end ?
sem uma ideia geral do que estás a fazer, não vou dizer o que deves usar, quando deves usar
E como posso implementar o Thread t = new Thread(); ?
Já tentei meter algo deste genero mas não deu:
//Connect c = new Connect(client);
Thread t = new Thread(new Connect(client));
a classe Connect implementa o interface Runnable ?
Já sei qual era o erro, com um bocado de Google lá descubri.
Ao meter assim já dá:
Thread t = new Connect(client);
Agora neste caso sempre que alguem se liga a este servidor ele cria uma nova thread.
Para me fazer entender melhor deixo aqui parte do enunciado:
Este trabalho estabelece vários servidores Front-End (nós) que interceptam a comunicação entre um servidor Back-End e os clientes, como representado na figura 1. O propósito dos nós é o de aliviar a carga a que pode estar sujeito o servidor principal (Back-End). Os nós necessitam de suportar comunicação RMI com o servidor Back-End. O cliente deve invocar métodos no sistema Back-End enviando uma mensagem TCP ao nó. O nó invoca os métodos remoto via RMI. Os nós devem manter uma Tabela Hash Distribuida (DHT) com os endereços IPV4 e a respectiva carga dos nós conhecidos. A carga do servidor é determinada pela memória utilizada pela JVM. Pares (chave, valor) são armazenados na DHT e qualquer nó participante pode eficientemente recuperar o valor associado a uma dada chave. A responsabilidade de manter o mapeamento de chaves para valores é distribuída entre os nós tal que mudanças no conjunto de participantes causem o mínimo de desordem. Isso faz com que as DHTs escalem a um número extremamente grande de nós e controlem chegadas, saídas e falhas contínuas dos mesmos. Os nós devem manter a DHT, enviando mensagens entre si, informando da sua carga em cada 10 segundos. Qualquer dos nós verifica a cada 60 segundos se houve mensagens por parte dos outros nós. No caso de um dos nós não ter enviado mensagens durante esse periodo de tempo, é considerado "off-line". Nestas circunstâncias o nó "off-line" mantem-se na tabela, sendo-lhe atribuido uma carga com valor null. Do mesmo modo, se um nó estiver em modo "off-line" por mais de 120 segundos, é removido da tabela.