


Java Websocket-Entwicklungshandbuch: So erreichen Sie eine Echtzeitkommunikation zwischen Client und Server
Java Websocket-Entwicklungsleitfaden: Für die Implementierung der Echtzeitkommunikation zwischen Client und Server sind spezifische Codebeispiele erforderlich
Mit der kontinuierlichen Entwicklung von Webanwendungen ist Echtzeitkommunikation zu einem wesentlichen Bestandteil des Projekts geworden. Beim herkömmlichen HTTP-Protokoll sendet der Client eine Anfrage an den Server und die Daten können erst nach Erhalt der Antwort abgerufen werden. Dies führt dazu, dass der Client den Server kontinuierlich abfragt, um die neuesten Daten zu erhalten, was zu Leistungs- und Effizienzproblemen führt . WebSocket wurde geboren, um diese Probleme zu lösen.
WebSocket ist ein neues Protokoll in HTML5. Es ermöglicht eine bidirektionale Kommunikation und reduziert den Aufwand für Client-Abfragen. Der Client kann Nachrichten direkt an den Server senden, ohne auf eine Antwort vom Server warten zu müssen. Dadurch wird die Entwicklung von Echtzeitanwendungen einfacher und effizienter.
Java ist eine in der Webanwendungsentwicklung weit verbreitete Sprache und bietet auch eine Möglichkeit, Websocket einfach zu implementieren. Hier erfahren Sie, wie Sie Websockets in Java verwenden.
Der erste Schritt besteht darin, die WebSocket-API von Java zu importieren. Sie können dies über das zentrale Maven-Repository oder über die API im javax.websocket-Paket aus dem Java EE 7-Framework tun.
Hier ist ein Beispiel für die Implementierung von Websocket mithilfe der API im Paket javax.websocket in Java EE 7:
- Erstellen Sie die ServerEndpoint-Annotationsklasse.
Erstellen Sie die Klasse mithilfe der @WebSocket-Annotation, um dem Java-Server mitzuteilen, dass diese Klasse diese Klasse ist kann diese Sitzung als WebSocket-Endpunkt übertragen und einen URI bereitstellen, um diese Adresse dem WebSocket-Endpunkt zuzuordnen.
import javax.websocket.*; import javax.websocket.server.ServerEndpoint; @ServerEndpoint(value = "/websocket") public class WebSocketExample { @OnOpen public void onOpen(){ System.out.println("Connection opened"); } @OnClose public void onClose(){ System.out.println("Connection closed"); } @OnMessage public void onMessage(String message){ System.out.println("Message received: " + message); } }
Verwenden Sie die WebSocketExample-Klasse als Eingang zu unserem WebSocket-Programm. Im obigen Beispiel haben wir die Annotation @ServerEndpoint mit der Endpoint-Klasse verwendet, um die Klasse dem angegebenen URI zuzuordnen.
@OnOpen-, @OnMessage- und @OnClose-Annotationen sind ereignisbasiert und werden verwendet, um Methoden anzugeben, die aufgerufen werden sollen, wenn eine WebSocket-Verbindung geöffnet, eine Nachricht empfangen und die Verbindung geschlossen wird.
Die erhaltene Nachrichtenzeichenfolge wird direkt an die Rückrufmethode onMessage übergeben. Jetzt haben wir Endpunkte auf der WebSocket-Serverseite definiert.
- Client-Beispiel erstellen
public class WebSocketClientExample extends Endpoint { public static CountDownLatch latch; @Override public void onOpen(final Session session, EndpointConfig config) { System.out.println("Connected"); try { session.getBasicRemote().sendText("Hello"); } catch (IOException ex) { } } @Override public void onError(final Session session, Throwable t) { t.printStackTrace(); } }
Unser WebSocket-Client kann javax.websocket.Endpoint als Basisklasse verwenden, die Teil der WebSocket-API ist.
Wir verwenden CountDownLatch, um festzustellen, ob der Client mit dem Server verbunden ist.
In der Rückrufmethode onOpen() haben wir eine Verbindung zum Server hergestellt und die Nachricht gesendet.
Hinweis: In diesem Beispiel wird die Nachricht mithilfe der Methode session.getBasicRemote().sendText(„Hello“); gesendet. In der WebSocket-API gibt es eine weitere Methode zum Senden von Nachrichten, nämlich session.getAsyncRemote().sendText("Hello");. Der Unterschied besteht darin, dass die Methode getBasicRemote() blockierend ist, während die Methode getAsyncRemote() nicht blockierend ist . von. Wenn wir Nachrichten asynchron senden möchten, können wir getAsyncRemote() verwenden.
- Erstellen Sie eine Testklasse und führen Sie die Anwendung aus.
Erstellen Sie eine Testklasse, um den Server und den Client zu bedienen und den normalen Verbindungsaufbau sicherzustellen. Sie müssen die Anwendung starten und die laufende Anwendung mit dem WebSocket-Server interagieren lassen. Wenn alles in Ordnung ist, sollten auf der Konsole des Entwicklungstools einige Meldungen angezeigt werden.
import javax.websocket.*; import java.net.URI; import java.util.concurrent.CountDownLatch; public class AppRunner { public static void main(String[] args) throws Exception { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); CountDownLatch latch = new CountDownLatch(1); container.connectToServer(new WebSocketExample(), new URI("ws://localhost:8080/websocket")); latch.await(); } }
Dieser Testcode startet den WebSocket-Client und versucht, eine Verbindung zum WebSocket-Server auf localhost:8080 herzustellen. Wir werden ein CountDownLatch-Objekt verwenden, um zusammen mit einigen zusätzlichen Informationen auf eine erfolgreiche Verbindung zu warten.
Beim Ausführen des Tests können wir http://localhost:8080/websocket über einen Webbrowser eingeben und die JavaScript-Konsole öffnen, um Nachrichten anzuzeigen und über das JavaScript-WebSocket-Objekt an den WebSocket-Client zu senden.
Zusammenfassung:
Die Verwendung von WebSocket für die Echtzeitkommunikation ist weitaus effizienter als die Verwendung herkömmlicher regelmäßiger HTTP-Abfragen. In der Java-Sprache können Sie die WebSocket-API verwenden, um Websocket zu implementieren. Dieser Artikel enthält ein Java-Beispielprogramm für WebSocket-Server und -Client sowie konkrete Code-Implementierungsbeispiele. Ich hoffe, dass er den Lesern hilfreich sein wird.
Das obige ist der detaillierte Inhalt vonJava Websocket-Entwicklungshandbuch: So erreichen Sie eine Echtzeitkommunikation zwischen Client und Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

AdeadlockinjavaoccurswhentwoOmorethreadsareblockedforever, jeder waitingForAresourceheldyTheOther, typischerweiseDuetoccircularWait -byConsistentLockorder;
![Sie verwenden derzeit keine an eine NVIDIA GPU angehängte Anzeige [behoben].](https://img.php.cn/upload/article/001/431/639/175553352135306.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Ifyousee "youarenotusingAdisplayAttachedToannvidiagpu", sorgthyourMonitorisconnectedTotenvidiagpuport, configuredisplaysetingsinnvidiaControlpanel, aktualisiertesRiversusingdduandcleanInstall und SetthePrimarygputodiscretetIniNBiScreteInbios/uefi.restartafartafartafarfArtartafarfaTafarygputodiscreteInbios/uefi

Useoptional.empty (), optional.of (), andoptional.ofnulle () tocreateoptionalinStancesDendonwhenthevalueisabsinent, nicht null, orpossiblesiblesible.2.CheckForvaluessafelyusingiSent () -Preferactifrisiflyteflythithortefleftwishthorteflecthors.

Micronautissidealforbuildingcloud-nativjavaapplicationsduetoitslowMemoryfootprint, Faststartuptimes und Compile-TimedependencyInjection, Making-SuperiortotraditionalframeWorkslikespringbootformicros-Service, Contentotrost und serverlessAnlenneVironment.1.Microna

Verstehen Sie JCA -Kernkomponenten wie MessagedIGest, Chiffre, Keygenerator, Securerandom, Signature, Keystore usw., die Algorithmen über den Anbietermechanismus implementieren. 2. Verwenden Sie starke Algorithmen und Parameter wie SHA-256/SHA-512, AES (256-Bit-Schlüssel, GCM-Modus), RSA (2048-Bit oder höher) und Securerandom; 3. Vermeiden Sie hartcodierte Schlüssel, verwenden Sie Keystore, um Schlüssel zu verwalten und Tasten über sichere abgeleitete Passwörter wie PBKDF2 zu generieren. 4. Deaktivieren

Der Kern von Springdatajpa und Hibernate, die zusammenarbeiten, lautet: 1. JPA ist die Spezifikation und der Winterschlaf ist die Implementierung, die Springdatajpa -Kapselung vereinfacht die DAO -Entwicklung. 2. Entity -Klassen karten Datenbankstrukturen über @entity, @ID, @Column usw.; 3.. Die Repository -Schnittstelle erbt JParepository, um CRUD und benannte Abfragemethoden automatisch zu implementieren. 4. Komplexe Abfragen verwenden @Query Annotation, um JPQL oder native SQL zu unterstützen. 5. Im Springboot wird die Integration durch Hinzufügen von Starterabhängigkeiten und Konfigurieren von Datenquellen und JPA -Attributen abgeschlossen. 6. Transaktionen werden von @transactiona durchgeführt

RuntheApplicationOrcommandasAdministratorbyright-ClickingandSelecting "Runasadministrator" TensureElevatedPrivileGeSareGrant.2.CheckuserAccountControl (UAC) EinstellungensbysearchingForuacinThestartMenuandttheSlidtothEDEDEDEDEDEDEDEDEDEFAULTLEVELLE (Secondfr

Die Musterklasse wird verwendet, um reguläre Ausdrücke zu kompilieren, und in der Matcher -Klasse werden übereinstimmende Vorgänge für Zeichenfolgen durchgeführt. Die Kombination der beiden kann die Textsuche, die Übereinstimmung und den Austausch von Text realisieren. Erstellen Sie zuerst ein Musterobjekt über muster.comPile () und rufen Sie dann seine Matcher () -Methode auf, um eine Matcher -Instanz zu generieren. Verwenden Sie dann Matches (), um die vollständige String -Matching zu beurteilen, zu finden (), um Subsequenzen zu finden, zu ersetzen () oder ersetzen Sie essFirst () für den Austausch. Wenn der reguläre Fall eine Erfassungsgruppe enthält, kann der N -te Gruppeninhalt über die Gruppe (N) erhalten werden. In den tatsächlichen Anwendungen sollten Sie wiederholte Kompilierungsmuster vermeiden, auf spezielle Charakter -Escapes achten und das Matching -Muster -Flag nach Bedarf verwenden und letztendlich effizient erreichen
