Nous avons une application cliente RMI écrite en Java qui doit envoyer des messages périodiques "rester en vie" à une application serveur. Nous l'avons implémenté comme un thread de pulsation distinct, qui envoie le message stay alive au serveur, puis dort pendant 15 secondes en utilisant Thread.sleep().Comment puis-je garantir que le rythme cardiaque «reste en vie» est envoyé?
Le fil est défini comme priorité:
Thread heartbeatThread = new Thread(new HeartbeatRunnable(server));
heartbeatThread.setPriority(Thread.MAX_PRIORITY);
heartbeatThread.start();
Cependant, lorsque la case sur laquelle le client est en cours d'exécution est en utilisant beaucoup de CPU, nous constatons que les battements de coeur sont manqués, ce qui provoque le serveur à assumer notre application client est morte.
Nous avons ajouté des appels Thread.yield() dans mon thread principal, même si cela n'a pas permis de résoudre le problème.
Est-il possible de garantir que les pulsations sont envoyées à temps lorsque mon application est en cours d'exécution?
Merci pour la réponse. Nous envoyons déjà des battements de cœur dans un fil séparé, et le serveur nous coupe après aucun battement de cœur pendant 90 secondes, donc l'envoi toutes les 15 secondes semblait conservateur. –
Il est très conservateur, en effet. Mais si vous ne parvenez pas à envoyer un battement de cœur pendant 90 secondes lorsque vous essayez d'en envoyer un toutes les 15 secondes, votre boîte est sérieusement surchargée et votre client devrait peut-être vraiment être considéré comme mort. Voir la réponse de Pete. – Bombe