Heim >Java >javaLernprogramm >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 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.
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, 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!