1.Was ist ein Herzschlagbeutel?
Ein Herzschlagpaket ist ein selbstdefiniertes Befehlswort, das die andere Partei zwischen dem Client und dem Server regelmäßig über einen bestimmten Zeitintervall gesendet wird, ähnlich wie ein Herzschlag, so dass es als Herzschlagpaket bezeichnet wird.
Wird verwendet, um festzustellen, ob die andere Partei (Gerät, Prozess oder ein anderes Netzwerkelement) normal arbeitet. Es wird zeitlich festgelegt, um einfache Kommunikationspakete zu senden. Wenn innerhalb eines bestimmten Zeitraums keine Antwort der anderen Partei empfangen wird, wird festgestellt, dass die andere Partei offline ist. Wird verwendet, um eine abnormale Trennung von TCP zu erkennen. Der Grund dafür ist, dass der Server nicht effektiv bestimmen kann, ob der Client online ist, dh der Server kann nicht unterscheiden, ob der Client lange Zeit im Leerlauf ist oder getrennt wurde. Das sogenannte Herzschlagpaket ist, dass der Client einfache Informationen regelmäßig an den Server sendet, um ihm zu sagen, dass ich immer noch da bin. Der Code soll alle paar Minuten eine feste Nachricht an den Server senden. Nach dem Empfangen antwortet der Server auf eine feste Nachricht. Wenn der Server die Clientinformationen innerhalb weniger Minuten nicht erhält, wird der Client nicht verbunden.
Zum Beispiel wird eine Kommunikationssoftware für lange Zeit nicht verwendet. Wenn Sie wissen möchten, ob der Status online oder offline ist, benötigen Sie ein Herzschlagpaket und senden und empfangen regelmäßig Pakete. Der Auftragnehmer: Es kann ein Kunde oder ein Server sein. Es hängt davon ab, welche Seite bequem und angemessen zu implementieren ist, und es ist im Allgemeinen ein Kunde. Der Server kann auch zu Herzschlägen führen. Im Allgemeinen sendet der Client aus Effizienzgründen Pakete aktiv an den Server, anstatt dass der Server sie an den Client sendet. Der Client sendet ab und zu ein Paket mit TCP, sendet es mit Send mit UDP mit SendTO. Nachdem der Server ihn empfangen hat, wird er wissen, dass sich der aktuelle Client noch in einem "lebendigen" Zustand befindet. Wenn ein solches Paket nach einem bestimmten Zeitraum nicht empfangen wird, ist der Server der Ansicht, dass der Client getrennt und die entsprechende Verarbeitung von Client -Disconnection -Logik durchgeführt wird.
2. Das Folgende ist ein einfaches Beispiel für die Implementierung des Java -Heartbeat -Pakets
a) Server Side Server.java
Paket cn.yw.socket.heart; import Java.io.objectinput; import Java.io.objectInputStream; importieren java.net.serversocket; java.net.socket; öffentlicher Klasse erweitert Thread {private serversocket server = null; ServerSocket (25535); Socket Client = server.accept (); synchronisiert (obj) {neuer Thread (neuer Client (Client)). Start ();}}} catch (Ausnahme E) {e.printstackTrace ();}/** * Client -Thread * @authetor client {classclient {classClement client client {sockcls client {class client client {sockcls cl. client;}@override public void run () {try {while (true) {objectInput in = new ObjectInputStream (client.getInputStream ()); Entity entity = (entity) in e) {e.printstacktrace ();}}}/***Die Eintrags -Hauptmethode des Programms*@param args*/public static void main (String [] args) {new server (). start ();}}}b) Client.java
Paket cn.yw.socket.heart; öffentliche Klasse erweitert Thread {@Override public void run () {try {while (true) {ClientSender.getInstance (). send (); synchronized (client.class) {// this.wait (5000); e) {e.printstacktrace ();}}/*** Programmeintrag Hauptmethode* @param args*/public static void main (String [] args) {client = new client (); client.start ();}} Paket cn.yw.socket.heart; importieren java.io.objectoutputStream; importieren java.net.inetaddress; import Java.net.socket; öffentliche Klasse Clientsender {private Clientsender () {} Socket Sender = Null; private statische ClientSender -Instanz; öffentlich -statische Clientsender -Instanz; getInstance () {if (instance == null) {synchronized (client.class) {instance = new Clientsender ();}} return Instance;} public void send () {try {sender = new Socket (inetadDress.getLocalHost (), 25535); while (true) {ObjectOutputStream out = new ObjectOutputStream (Sender.GetOutputStream ()); Entity obj = new Entity (); obj.setName ("syz"); obj.setSex ("männlich");3.. Entity Class Entity.java
Paket cn.yw.socket.heart; import Java.io.Serializable; öffentliche Klasse Entität implementiert serializable {private String name; private String Sex; Sex;}}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die Analyse des Beispiels für Heartbeat -Paket -Erstellung von Java Socket. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
Beispielcode zur Implementierung der Socket -Kommunikation in Java Multithread -Programmierung
Beispiel für Java -Programmiercode, Beispiel für Socket Multithreading, um auf Serverdateien zuzugreifen
Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!