Heim Java javaLernprogramm Java Websocket-Entwicklungshandbuch: So erreichen Sie eine Echtzeitkommunikation zwischen Client und Server

Java Websocket-Entwicklungshandbuch: So erreichen Sie eine Echtzeitkommunikation zwischen Client und Server

Dec 02, 2023 am 11:52 AM
java websocket Echtzeitkommunikation

Java Websocket开发指南:如何实现客户端与服务器端的实时通信

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:

  1. 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.

  1. 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.

  1. 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1600
276
Was ist ein Deadlock in Java und wie können Sie ihn verhindern? Was ist ein Deadlock in Java und wie können Sie ihn verhindern? Aug 23, 2025 pm 12:55 PM

AdeadlockinjavaoccurswhentwoOmorethreadsareblockedforever, jeder waitingForAresourceheldyTheOther, typischerweiseDuetoccircularWait -byConsistentLockorder;

Sie verwenden derzeit keine an eine NVIDIA GPU angehängte Anzeige [behoben]. Sie verwenden derzeit keine an eine NVIDIA GPU angehängte Anzeige [behoben]. Aug 19, 2025 am 12:12 AM

Ifyousee "youarenotusingAdisplayAttachedToannvidiagpu", sorgthyourMonitorisconnectedTotenvidiagpuport, configuredisplaysetingsinnvidiaControlpanel, aktualisiertesRiversusingdduandcleanInstall und SetthePrimarygputodiscretetIniNBiScreteInbios/uefi.restartafartafartafarfArtartafarfaTafarygputodiscreteInbios/uefi

Wie benutze ich in Java optional? Wie benutze ich in Java optional? Aug 22, 2025 am 10:27 AM

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

Bauen von Java-Anwendungen mit Micronaut auf Bauen von Cloud-nativen Java-Anwendungen Bauen von Java-Anwendungen mit Micronaut auf Bauen von Cloud-nativen Java-Anwendungen Aug 20, 2025 am 01:53 AM

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

Java Cryptography Architecture (JCA) zur sicheren Codierung Java Cryptography Architecture (JCA) zur sicheren Codierung Aug 23, 2025 pm 01:20 PM

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

Java Persistenz mit Frühlingsdaten JPA und Hibernate Java Persistenz mit Frühlingsdaten JPA und Hibernate Aug 22, 2025 am 07:52 AM

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

Behoben: Windows zeigt 'Ein erforderliches Berechtiger wird vom Kunden nicht gehalten'. Behoben: Windows zeigt 'Ein erforderliches Berechtiger wird vom Kunden nicht gehalten'. Aug 20, 2025 pm 12:02 PM

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

Wie benutze ich die Muster- und Matcher -Klassen in Java? Wie benutze ich die Muster- und Matcher -Klassen in Java? Aug 22, 2025 am 09:57 AM

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

See all articles