1. Qu'est-ce qu'un sac de battements cardiaques?
Un paquet de battements cardiaques est un mot de commande auto-défini qui informe régulièrement l'autre partie de son propre statut entre le client et le serveur, et est envoyé à un certain intervalle de temps, similaire à un battement de cœur, il est donc appelé un paquet de battements cardiaques.
Utilisé pour déterminer si l'autre partie (périphérique, processus ou autre élément de réseau) fonctionne normalement. Il utilise chronométré pour envoyer des paquets de communication simples. Si aucune réponse de l'autre partie n'est reçue dans un délai spécifié, il est déterminé que l'autre partie est hors ligne. Utilisé pour détecter une déconnexion anormale du TCP. La raison de base est que le serveur ne peut pas déterminer efficacement si le client est en ligne, c'est-à-dire que le serveur ne peut pas distinguer si le client est inactif depuis longtemps ou a été déconnecté. Le soi-disant paquet de battements cardiaques est que le client envoie régulièrement des informations simples au serveur pour lui dire que j'y suis toujours. Le code consiste à envoyer un message fixe au serveur toutes les quelques minutes. Après l'avoir reçu, le serveur répondra à un message fixe. Si le serveur ne reçoit pas les informations du client en quelques minutes, le client sera déconnecté.
Par exemple, certains logiciels de communication ne sont pas utilisés depuis longtemps. Si vous voulez savoir si son statut est en ligne ou hors ligne, vous avez besoin d'un paquet de battements cardiaques et d'envoyer et de recevoir des paquets régulièrement. L'entrepreneur: il peut s'agir d'un client ou d'un serveur. Cela dépend de quel côté est pratique et raisonnable à mettre en œuvre, et c'est généralement un client. Le serveur peut également provoquer des battements cardiaques régulièrement. D'une manière générale, pour des raisons d'efficacité, le client envoie activement des paquets au serveur, plutôt que le serveur les envoie au client. Le client envoie un paquet de temps en temps, en utilisant TCP, l'envoie avec Send, en utilisant UDP, l'envoie avec Sendto. Une fois que le serveur l'a reçu, il saura que le client actuel est toujours dans un état "vivant". Sinon, si un tel paquet n'est pas reçu après une certaine période de temps, le serveur estime que le client a été déconnecté et effectue le traitement de la logique de déconnexion du client correspondant.
2. Ce qui suit est un exemple simple de la mise en œuvre du package de battements de cœur Java
a) Server serveur.java
package cn.yw.socket.heart; import java.io.objectInput; import java.io.objectInputStream; import java.net.serversocket; import java.net.socket; public class server étend le thread {private serversock Serversocket (25535); socket client = server.accept (); synchronisé (obj) {new thread (nouveau client (client)). Start ();}}}} catch (exception e) {e.printStackTrace ();}} / ** * * client client * @Author User * * Class Client = Runnable {Sock Client;} @ Override public void run () {try {while (true) {objectInput dans = new ObjectInputStream (client.getInputStream ()); Entity Entity = (Entity) dans.readObject (); System.out.prity.GetSEx ());}} e) {e.printStackTrace ();}}} / ** * La méthode principale de l'entrée du programme * @param args * / public static void main (String [] args) {new Server (). start ();}}}b) client.java
Package cn.yw.socket.heart; Client de classe publique étend Thread {@Override public void run () {try {while (true) {clientSender.getInstance (). Send (); synchronisé (client.class) {// this.wait (5000); Thread.Sleep (2000);}}}} catch (exception (exception e) {e.printStackTrace ();}} / ** * Entrée du programme Méthode principale * @param args * / public static void main (String [] args) {client client = new client (); client.start ();}} package cn.yw.socket.heart; import java.io.objectoutputStream; import java.net.inetaddress; import java.net.socket; classe publique clientSender {private clientSender () {} socket Sender = null; private static clientSender instance ClientSender ();}} return instance;} public void send () {try {Sender = new socket (inetAddress.getLocalHost (), 25535); tandis que (true) {objectOutputStream out = new ObjectOutputStream (Sender.getOutputStream ()); Entity obj = new Entity (); obj.setName ("syz"); obj.setSex ("mâle"); out.writeObject (obj)3. Entity Class Entity.java
package cn.yw.socket.heart; importer java.io.serializable; entité de classe publique implémente serializable {nom de chaîne privée; chaîne privée sexe; public string getName () {return name;} public void setName (String name) {this.name = name;} public string getSEX () {return sex;} public void setSexRésumer
Ce qui précède est tout le contenu de cet article sur l'analyse de l'exemple de création de package de battements de randonnées Java, j'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Exemple de code pour implémenter la communication de socket dans la programmation multithread Java
Exemple de code de programmation Java Utilisation de Socket Multithreading pour accéder aux fichiers de serveur
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!