Essayons WebSocket avec Java et javascript!

Utiliser Java et javascript (en utilisant jQuery)

  1. Écrivez le côté serveur en Java. Si vous lisez les commentaires dans le code, vous pouvez comprendre l'explication du contenu.

WebSocketServer.java


package main.java;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

//Avec cela, WebSocket Server
//L'URL peut être générique
@ServerEndpoint("/WebSocketServer")
public class WebSocketServer {

	//Session(la communication)Carte à enregistrer
	private static Map<String, Session> session = new HashMap<>();

	//Variable pour stocker votre identifiant
	 String myId = "";

	 //Variable pour stocker votre nom
	 String myName = "";

	/**
	 *Méthode appelée lors de la connexion
	 */
	@OnOpen
	public void onOpen(final Session client, final EndpointConfig config) {
		/*Traitement lors de l'établissement d'une session*/
		String log = client.getId() + " Was connected.";
		System.out.println(log);

	}

	/**
	 *Méthode appelée en cas d'erreur
	 */
	@OnError
	public void onError(final Session client, final Throwable error) {
		/*Traitement lorsqu'une erreur se produit*/
		String log = client.getId() + " was error. [" + error.getMessage() + "]";
		System.out.println(log);
	}

	/**
	 *Méthode appelée lors de la déconnexion
	 */
	@OnClose
	public void onClose(final Session client, final CloseReason reason) throws IOException {
		/*Traitement lors de la libération d'une session*/
		String log = client.getId() + " was closed by " + reason.getCloseCode() + "[" + reason.getCloseCode().getCode()
				+ "]";
		System.out.println(log);
	}

	/**
	 *La méthode appelée lorsque le message est appelé
	 */
	@OnMessage
	public void onMessage(final String text, final Session client) throws IOException {
		/*Traitement lors de la réception d'un message*/
		System.out.println("Réception WebSocket:" + text);

		//On suppose que le contenu du message est exploité séparément par des sauts de ligne et que l'identifiant est décrit.
		String[] t = text.split("\n");
		String event = t[0];
		String id = t[1];

		System.out.println("EVENT:" + event);
		System.out.println("ID:" + id);
		switch (event) {

		case "login":
			//Enregistrer la session dans HashMap
			session.put(id, client);
			//Stockez l'ID dans une variable.
			myId = id;

			//Découpez le nom
			int strSize = id.length();
			int cutLength = 4;
			int nameCut = strSize - cutLength;
			//Enregistrer uniquement le nom dans la variable
			myName = id.substring(0,nameCut);
			System.out.println("Nom découpé:" + myName);

			//Envoyer une chaîne à la session enregistrée par identifiant
			Session mySession = session.get(id);
			mySession.getBasicRemote().sendText("Welcom to " + myName + " !!");
			System.out.println("login:" + id);
			break;

		case "commit":
			//diffuser
			for (Session s : session.values()) {
				s.getBasicRemote().sendText(myName + ": " + t[1]);
			}
			System.out.println("commit:" + t[1]);
			break;

		case "close":
			//Supprimer de la liste des sessions
			System.out.println("ID à supprimer:" + myId);
			//Supprimer la session enregistrée
			session.remove(myId);
			System.out.println("close:Supprimer la session");
			break;
		}
	}
}
  1. Écrivez le javascript côté client. J'apprécierais que vous lisiez également les commentaires ici.

script.js


$(function() {
	var url = 'ws://' + window.location.host + '/SampleServer/WebSocketServer';
    var ws = null;
    var inputId;
    console.log('Emplacement:' + window.location.host);

		//Variables pour générer des nombres aléatoires à 4 chiffres
		var min = 1000;
		var max = 9999;

		//Code Salt à attacher au nom et à le convertir en ID
		var saltCode;

    //Appuyez sur le bouton initButton et il fonctionnera ici
      $('#login').on("click",function() {
        if (ws == null) {
            inputId = $('#box1').find('input').val();
             //Si l'ID est vide, ne vous enregistrez pas
             if(inputId != "") {
            //Initialiser Websocket
             ws = new WebSocket(url);
            //Inscription du gestionnaire d'événements
             ws.onopen = onOpen;
             ws.onmessage = onMessage;
             ws.onclose = onClose;
             ws.onerror = onError;
             console.log("ID:" + inputId);
            } else {
                alert("Veuillez saisir votre identifiant!!");
            }
        }

      });

    //WebSocket open
    function onOpen(event) {
       $("#log").prepend("&lt;onopen&gt; " + "<br/>");
        console.log("Établissement de la connexion WebSocket");
				//Générer un entier aléatoire à 4 chiffres
				saltCode = Math.floor(Math.random() * (max + 1 - min)) + min;
				//Cast explicitement en chaîne
				String(saltCode);
				//Créer un identifiant en joignant un code salt
				inputId = inputId + saltCode;
				console.log('ID avec code sel:' + inputId);
       ws.send("login\n" + inputId);
    };

    //WebSocket message
    function onMessage(receive) {
       $("#log").prepend(receive.data + "<br/><br/>");
        console.log("Message de réponse:" + receive.data);
    };

    //WebSocket error
    function onError() {
        $("#log").prepend("&lt;onerror&gt; " + "<br/>");
        console.log("La gestion des erreurs");
        alert("error");
    };

    //WebSocket close
    function onClose() {
        $("#log").prepend("&lt;onclose&gt; " + "<br/>");
        ws.send("close\ndelete")
        ws = null;
        console.log("Déconnexion WebSocket");
    };


    //fenêtre fermée(Exemple:Fermé le navigateur)Définir l'événement de temps
    $(window).on("beforeunload",function() {
        ws.onclose(); //WebSocket close
    });

    //Envoyer un message au serveur à l'aide de WebSocket
   $('#send').on('click',function() {
       var sendMessage = $('#message').val();
       console.log("message:" + sendMessage);
       if(sendMessage != "") {
       ws.send("commit\n" + sendMessage);
           $('#message').val("");
       } else {
           console.log("Je ne l'enverrai pas car il est vide");
       }
   });
});
  1. Préparez un simple HTML.

index.html


<!DOCTYPE html>

<html>
<head>
    <title>WebSocket Server Sample</title>
    <meta charset="utf-8"/>
    <script src="js/lib/jquery-3.4.1.min.js"></script>


    </head>
<body>
    <div id="box1">
    <input type="text" id="id" placeholder="inputID" />
    <button id="login">login</button>
        </div>
    <br/>
    <div id="box2">
    <input type="text" id="message" placeholder="inputMessage" />
        <button id="send">send</button>
        </div>
    <br/>
    <div id="log"></div>
    <script src="js/script.js"></script>
    </body>
</html>

Je pense que ça marche comme ça.

スクリーンショット 2020-04-19 12.48.35.png

Connectez-vous en tant qu'autre utilisateur et envoyez un message.

スクリーンショット 2020-04-19 12.52.09.png

Vous recevrez un message. !! !!

スクリーンショット 2020-04-19 12.54.07.png

Je peux lire le message correctement.

En utilisant webSocket de cette manière, nous avons pu créer un système de chat simple. Il semble que des choses intéressantes peuvent être créées en établissant des liens avec une base de données ou en construisant un système. Ce qui précède est une simple implémentation Websocket.

Merci d'avoir lu jusqu'au bout.

Recommended Posts

Essayons WebSocket avec Java et javascript!
Java et JavaScript
Essayez WebSocket avec jooby
Raclons avec Java! !!
Essayez d'intégrer Ruby et Java avec Dapr
Expérimentons l'expansion en ligne Java
Essayez la connexion DB avec Java
Essayez d'appeler JavaScript en Java
Essayez gRPC avec Java, Maven
Exploitons Excel avec Java! !!
Exécutez Mosquitto avec Docker et essayez la communication WebSocket avec MQTT
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
Communication socket avec un navigateur Web utilisant Java et JavaScript ①
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
Installez Java et Tomcat avec Ansible
[Java EE] Implémenter le client avec WebSocket
Utilisez JDBC avec Java et Scala.
Essayez d'utiliser Redis avec Java (jar)
Sortie PDF et TIFF avec Java 8
Essayez la communication bidirectionnelle avec gRPC Java
Crypter avec Java et décrypter avec C #
Créez une énumération haute performance avec des champs et des méthodes comme Java avec JavaScript
Surveillez les applications Java avec jolokia et hawtio
Lier le code Java et C ++ avec SWIG
Essayez d'exécuter MySql et Blazor avec docker-compose
[Java] Lecture et écriture de fichiers avec OpenCSV
HTTPS avec Spring Boot et Let's Encrypt
Soyons paresseux avec l'héritage et le remplacement
Essayez de gérer les bibliothèques Java avec AWS CodeArtifact
Essayez d'utiliser la télécommande Wii en Java
Étudions Java
Créons un processus chronométré avec la minuterie de Java! !!
Créez et testez des applications Java + Gradle avec Wercker
Pleiades Eclipse 2020-03 Release ~ Java 14 Essayons de nouvelles fonctionnalités!
[Swift vs Java] Comprenons le statique et le final
JSON avec Java et Jackson Part 2 XSS mesures
Différences dans l'écriture des classes Java, C # et Javascript
XXE et Java
Préparer un environnement de scraping avec Docker et Java
Essayez d'implémenter TCP / IP + NIO avec JAVA
KMS) Chiffrement d'enveloppe avec décryptage openssl et java
Essayez grossièrement Java 9
Essayez de déboguer un programme Java avec VS Code
Crypter / décrypter avec AES256 en PHP et Java
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
[Review] Lecture et écriture de fichiers avec java (JDK6)
[Java] Aligne les caractères même avec des caractères mixtes demi-largeur et pleine largeur
Utilisez Fast Mapping Livery MapStruct avec Lombok et Java 11
Essayez d'utiliser un conteneur DI avec Laravel et Spring Boot
Tableau 2D AtCoder ABC129 D résolu en Ruby et Java
Résumé du comportement de ToString avec les annotations Java et Groovy
Exécutez Maven sur Java 8 lors de la compilation sur Java 6 et des tests sur Java 11
Résolution avec Ruby, Perl et Java AtCoder ABC 128 C
[Bases de Java] Créons un triangle avec une instruction for
[Java] Se référer et définir des variables privées avec réflexion
[LeJOS] Contrôlons à distance le moteur EV3 avec Java
Je veux faire des transitions d'écran avec kotlin et java!