[Java EE] Implémenter le client avec WebSocket

Récemment, l'article de Qiita est devenu un rapport d'étape. Cette fois, c'est une suite de l'article ici.

Ajout de tyrus-standalone-client

Lorsque j'écris et exécute un programme client normalement, j'obtiens l'erreur suivante.

Exception in thread "main" java.lang.RuntimeException: Could not find an implementation class.
	at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.java:73)
	at Main.main(Main.java:46)

Selon stackoverrun, websocket fournit l'interface client, mais pas l'implémentation. Par conséquent, nous allons introduire tyrus-standalone-client dans Glassfish. Comment implémenter WebSocketContainer dans la classe StandardWebSocketClient

Plus précisément, ajoutez-le aux dépendances de build.gradle.

dependencies {
    //J'ai expliqué la dernière fois
    compileOnly 'javax:javaee-api:8.0'
    //C'est ce que j'ajouterai cette fois
    compile group: 'org.glassfish.tyrus.bundles', name: 'tyrus-standalone-client', version: '1.14'
}

Écrire ClientEndPoint

Maintenant, écrivons le programme immédiatement cette fois. -> src-> main-> Créez un fichier .java dans (package approprié) en java.


import javax.websocket.*;
import java.net.URI;
import java.util.Scanner;

//Avec cette annotation, il est reconnu comme le point final du client
@ClientEndpoint
public class Client {

    public Client() {
        super();
    }

    //Traitement lors de l'établissement d'une session
    @OnOpen
    public void onOpen(Session session) {
        System.out.println("[Création de session]");
    }

    //Traitement lors de la réception d'un message
    @OnMessage
    public void onMessage(String message) {
        System.out.println("[Recevoir]:" + message);
    }

    //Traitement lors de la réception d'un message
    @OnError
    public void onError(Throwable th) {
        System.err.println(th.getMessage());
    }

    //Traitement lors de la libération d'une session
    @OnClose
    public void onClose(Session session) {
        System.out.println("[Déconnecter]");
    }

    static public void main(String[] args) throws Exception {

        //Obtenez l'objet conteneur WebSocket pour l'initialisation
        WebSocketContainer container = ContainerProvider
                .getWebSocketContainer();
        //URI du point de terminaison du serveur
        URI uri = URI
                .create("ws://localhost:8080/<Nom du projet>/<Lien>");
        //Établir une session avec le point de terminaison du serveur
        //À partir du client en cours d'exécution, recherchez la même classe passée dans l'argument et connectez-vous?
        Session session = container.connectToServer(Client.class, uri);

        while (!session.isOpen()) {
            Thread.sleep(500);
        }

        System.out.println("open");

        try (Scanner s = new Scanner(System.in)) {
            String str;
            System.out.println("start loop");
            while (true) {
                str = s.nextLine();
                if(str.equals("exit")) break;
                //Envoyer le contenu de str
                session.getBasicRemote().sendText(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Comme c'est gênant, j'ai écrit main dans la classe Endpoint cette fois, mais je pense qu'il vaut mieux le séparer.

Courir

Tout d'abord, démarrez le serveur contenant le client avec tomcatRun etc., puis exécutez main dans une autre fenêtre.

Recommended Posts

[Java EE] Implémenter le client avec WebSocket
Activer Java EE avec NetBeans 9
Intégration API de Java avec Jersey Client
Application Java EE One-JAR avec WebSphere Liberty
Test Java EE (CDI / intercepteur) avec Arquillian
Essayons WebSocket avec Java et javascript!
Client Java mqtt
Créer un environnement de test E2E avec Selenium (Java)
Essayez d'implémenter TCP / IP + NIO avec JAVA
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
Changer de siège avec Java
Installez Java avec Ansible
Essayez WebSocket avec jooby
Téléchargement confortable avec JAVA
Changer java avec direnv
Implémentez rapidement singleton avec enum en Java
Implémenter le client API avec juste des annotations à l'aide de Feign (OpenFeign)
J'ai essayé d'implémenter Sterling Sort avec Java Collector
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
Java EE sans serveur à partir de Quarkus et Cloud Run
Conversion Endian avec JAVA
J'ai essayé de moderniser une application Java EE avec OpenShift.
C'est OK WebSocket: Serveur = Java, Client = Java, JavaScript
Je veux implémenter diverses fonctions avec kotlin et java!
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
Configuration Java avec Spring MVC
Authentification de base avec Java 11 HttpClient
Jouez avec le client Jersey OAuth 2
Expérimentons l'expansion en ligne Java
Exécuter un lot avec docker-compose avec Java batch
[Template] Connexion MySQL avec Java
Réécrire Java try-catch avec facultatif
Installez Java 7 avec Homebrew (cask)
[Java] Communication JSON avec jackson
Implémenter GraphQL avec Spring Boot
Java pour jouer avec Function
Client GraphQL commençant par Ruby
Essayez la connexion DB avec Java
[Java] JavaConfig avec classe interne statique
Essayez gRPC avec Java, Maven
Exploitons Excel avec Java! !!
Implémentation de l'authentification en deux étapes en Java
Gestion des versions Java avec SDKMAN
Cryptage / décryptage RSA avec Java 8
Pagination de PDF avec Java + PDFBox.jar
Trier les chaînes comme une fonction caractéristique avec Java
Orienté objet avec Strike Gundam (java)
Implémenter l'authentification de base en Java
reload jCaptcha implémenté avec ajax
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Implémenter une combinaison de mathématiques en Java
Dépannage avec Java Flight Recorder
Rationalisez les tests Java avec Spock
2 Implémentez une analyse syntaxique simple en Java
Connectez-vous à DB avec Java