Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②

Hintergrund

Frühere Artikel: https://qiita.com/take4eng/items/d0b009c48ee8c3fe420a

Erstellen Sie wie im vorherigen Artikel oben beschrieben ein Serverprogramm in Java und führen Sie die Socket-Kommunikation durch. ⇒ Da die HTTP-Kommunikation durch Drücken analysiert wird, ist der Code nutzlos kompliziert.

Java EE verfügt über viele APIs für die Socket-Kommunikation und kann sehr einfach implementiert werden. Viele Leute haben es bereits zusammengefasst, aber ich werde die implementierten Inhalte zusammenfassen.

Obwohl eine bequeme API vorbereitet ist, führt niemand eine Analyse durch Drücken durch. Selbst wenn ich es google, kommt es nicht leicht heraus ...

Praktischer Inhalt

  1. Verwendung der WebSocket-API
  2. Erstellen Sie ein Serverprogramm mit der API
  3. Bearbeiten Sie den Client-Programmcode im vorherigen Artikel, um eine Chat-Anwendung zu erstellen

Verwendung der WebSocket-API

Beschreibt die grundlegende WebSocket-API. Es gibt viele andere APIs als die hier vorgestellten, aber Sie können bei Bedarf googeln.

Erstellen einer Endpunktklasse

import javax.websocket.server.ServerEndpoint;
 
@ServerEndpoint("/Kontextpfad")
public class SanpleEndpoint {
}
  1. Importieren Sie die ServerEndpoint-Klasse
  2. Fügen Sie der Klasse die Annotation @ServerEndpoint hinzu
  3. Beschreiben Sie den Kontextpfad, der den Speicherort der Datei angibt

Verarbeitungsmethode erstellen

/*
Importieren Sie jede Klasse
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
*/

//Verarbeitung beim Herstellen einer Verbindung zu einem Client
@OnOpen
public void onOpen(Session session) {
}
 
//Was tun, wenn eine Nachricht vom Client empfangen wird?
@OnMessage
public void onMessage(String message) {
}

//Was tun, wenn ein Fehler auftritt?
@OnError
public void onError(Throwable error) {
}

//Was tun, wenn die Verbindung zum Client unterbrochen wird?
@OnClose
public void onClose(Session session) {
}
  1. Importieren Sie die erforderlichen Klassen
  2. Fügen Sie jede der Methode entsprechende Anmerkung hinzu
  3. Argumente können nach Bedarf geändert oder hinzugefügt werden

Erstellen Sie ein Serverprogramm mithilfe der API

Serverprogramm


import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

//Eine Anmerkung, die angibt, dass es sich um eine serverseitige Klasse eines Web-Sockets handelt.
//Streit(wSck)Stellt den URI dar, der beim Herstellen einer Verbindung vom Client verwendet wird.
@ServerEndpoint(value = "/wSck")
public class SocketFree2 {

	//Erstellen Sie einen Client-Sitzungsthread(Speichern Sie jede Sitzung für jeden Client)
	//Set: Sammlung ohne doppelte Elemente
	//CopyOnWriteArrayList:java.util.Eine thread-sichere Version von Set
	private static Set<Session> user = new CopyOnWriteArraySet<>();

	@OnOpen//Bei der Verbindung mit einem Client
    public void onOpen(Session mySession) {
        System.out.println("connect ID:"+mySession.getId());//session.getId():Sitzungs-ID abrufen
        user.add(mySession);//Hinzufügen einer Sitzung pro Client zur Liste
    }

    @OnMessage//Wenn Daten vom Client gesendet werden
    public void onMessage(String text , Session mySession) {//Argumente sind der gesendete Text und die Sitzung der Quelle
    	System.out.println(text);
    	//getAsyncRemote(): Holen Sie sich eine Instanz von RemoteEndpoint
    	//sendText(String): Text an Client senden
    	for (Session user : user) {
    		user.getAsyncRemote().sendText(text);
            System.out.println(user.getId()+"Zweite"+mySession.getId()+"Ich habe die zweite Nachricht gesendet!");
    	}
    	if(text.equals("bye")) onClose(mySession);//Trennen Sie die Verbindung, wenn der Text "Tschüss" ist.
    }

    @OnClose//Wenn der Client die Verbindung trennt
    public void onClose(Session mySession) {
    	System.out.println("disconnect ID:"+mySession.getId());
        user.remove(mySession);//Entfernen Sie die getrennte Client-Sitzung aus der Liste
        try {
			mySession.close();//Trennen Sie die Verbindung mit der Methode zum Schließen
		} catch (IOException e) {
			System.err.println("Ein Fehler ist aufgetreten: " + e);
		}
    }

}

Codebeschreibung

    1. Fügen Sie der Klasse die Endpunktanmerkung @ServerEndpoint hinzu und beschreiben Sie den Kontextpfad @ServerEndpoint(value = "/wSck")
  1. Erstellen Sie eine Liste, die jeden Client identifiziert private static Set<Session> user = new CopyOnWriteArraySet<>();

    1. onOpen-Methode: Client-Sitzung zur Liste hinzufügen user.add(mySession);

Vier. onMessage-Methode: Senden Sie den empfangenen Text unverändert an den Client ⇒ An alle verbundenen Clients mit zur Anweisung senden user.getAsyncRemote().sendText(text);

Fünf. onClose-Methode: Löschen Sie den getrennten Client 5-1. Aus der Benutzerliste entfernen: user.remove (mySession); 5-2. Sitzung löschen und trennen: mySession.close ();

Ausführungsergebnis

Ändern Sie die Adresse des Client-Programms und führen Sie es mit einem Webbrowser aus.

image.png Eine Chat-App, die den gesendeten Inhalt anzeigt, ist abgeschlossen. Es unterstützt auch den Zugriff von mehreren Browsern.

Impressionen

Die Socket-Kommunikation war mithilfe der API sehr einfach. Im Vergleich zu dem im letzten Artikel beschriebenen ist die Menge des geschriebenen Codes ungefähr 1/4. Es ist wunderbar. Super einfach.

Außerdem scheint es, dass das Codieren, Decodieren, Verarbeiten und Verarbeiten von JSON-Daten einfach durchgeführt werden kann. Ich habe es diesmal nicht benutzt, aber es wird für die vollständige Entwicklung notwendig sein. Weitere Informationen finden Sie auf der Referenzseite.

Referenzseite

Recommended Posts

Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
Erstellen Sie mit JavaScript eine leistungsstarke Aufzählung mit Feldern und Methoden wie Java
Probieren wir WebSocket mit Java und Javascript aus!
Java und JavaScript
Stellen Sie die Sensorinformationen von Raspberry Pi in Java grafisch dar und überprüfen Sie sie mit einem Webbrowser
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Erstellen Sie eine JAVA WEB App und probieren Sie OMC APM aus
[Java] Entwicklung mit mehreren Dateien mittels Paket und Import
[Java] JSON-Kommunikation mit Jackson
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Verwenden von Mapper mit Java (Spring)
PriorityQueue, wo ich Probleme mit der Dyxtra-Methode unter Verwendung einer benachbarten Liste (Java) hatte.
Erstellen Sie eine Java- und JavaScript-Teamentwicklungsumgebung (Gradle-Umgebungskonstruktion)
Ein einfaches CRUD-Beispiel mit Java Servlet / JSP und MySQL
Machen Sie einen Diamanten mit Java
AWS Elastic Beanstalk # 1 mit Java von Grund auf neu Erstellen einer Java-Webanwendungsumgebung mit EB CLI-
Lassen Sie uns eine Kommunikationsanwendung in LAN Teil 1 erstellen. Neue Projekterstellung mit Maven und Java Entry Point
Erstellen Sie einen einfachen Webserver mit der Java-Standardbibliothek com.sun.net.httpserver
Vergleich der WEB-Anwendungsentwicklung mit Rails und Java Servlet + JSP
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Vorbereitung]
Hinweis Nr. 2 "Erstellen eines Suchverlaufs mit ArrayList und HashSet" [Java]
Erstellen eines Java-Projekts mit Gradle
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
Installieren Sie Java und Tomcat mit Ansible
Laden Sie Dateien mit Java HttpURLConnection hoch
Verwenden Sie JDBC mit Java und Scala.
Versuchen Sie es mit Redis mit Java (jar)
Erstellen Sie eine Webanwendung mit Javalin
Ich habe versucht, UDP mit Java zu kommunizieren
Erstellen Sie ein Java-Projekt mit Eclipse
PDF und TIFF mit Java 8 ausgeben
Verwenden von Java mit AWS Lambda-Eclipse-Vorbereitung
HTML5-Entwicklung von Java mit TeaVM
Versuchen Sie die bidirektionale Kommunikation mit gRPC Java
Verwenden des Proxy-Dienstes mit Java-Crawling
Mit Java verschlüsseln und mit C # entschlüsseln
Prozesskommunikation mit AMQP mit RabbitMQ
Wie man IGV mit Socket-Kommunikation bedient und wie man einen Ruby Gem mit dieser Methode herstellt
Erstellen Sie mit Docker CE für Windows eine Webanwendungsentwicklungsumgebung, die Java, MySQL und Redis verwendet
Eine Sammlung von Phrasen, die das "unterschiedliche Gefühl" von Java und JavaScript beeindruckt
Erstellen eines Projekts (und eines GitHub-Repositorys) mit Java und Gradle mit IntelliJ IDEA
Anfänger erstellen Web-Apps mit Java und MySQL (jederzeit hinzufügen)
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
<java> Teilen Sie die Adresse vor und nach der Adresse mit einem regulären Ausdruck
Erstellen Sie mit Docker für Mac Teil2 eine Entwicklungsumgebung für Java-Webanwendungen
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
[Java] Ich habe JDBC installiert und versucht, eine Verbindung mit Servlet + MySQL herzustellen. (Es gibt eine Version mit DAO / Bean)
[Java] Erstellen und Anwenden eines Folienmasters
Erstellen Sie mit Docker schnell eine Webumgebung
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]