Articles précédents: https://qiita.com/take4eng/items/d0b009c48ee8c3fe420a
Comme décrit dans l'article précédent ci-dessus, créez un programme serveur en Java et effectuez une communication socket. ⇒ Puisque la communication HTTP est analysée en la poussant, le code est inutilement compliqué.
Java EE possède de nombreuses API liées à la communication par socket et peut être implémenté très facilement. Beaucoup de gens l'ont déjà résumé, mais je vais résumer le contenu mis en œuvre.
Même si une API pratique est préparée, personne ne fait l'analyse en la poussant. Même si je google, ça ne sort pas facilement ...
Décrit l'API WebSocket de base. Il existe de nombreuses API autres que celles présentées ici, mais vous pouvez Google si nécessaire.
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/Chemin de contexte")
public class SanpleEndpoint {
}
/*
Importez chaque classe
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
*/
//Traitement lors de la connexion à un client
@OnOpen
public void onOpen(Session session) {
}
//Que faire lorsqu'un message est reçu du client
@OnMessage
public void onMessage(String message) {
}
//Que faire lorsqu'une erreur se produit
@OnError
public void onError(Throwable error) {
}
//Que faire lorsque la connexion avec le client est perdue
@OnClose
public void onClose(Session session) {
}
Programme serveur
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;
//Une annotation qui indique qu'il s'agit d'une classe côté serveur d'un socket Web.
//argument(wSck)Représente l'URI utilisé lors de la connexion depuis le client.
@ServerEndpoint(value = "/wSck")
public class SocketFree2 {
//Créer un fil de session client(Enregistrez chaque session pour chaque client)
//Ensemble: Collection sans éléments en double
//CopyOnWriteArrayList:java.util.Une version thread-safe de Set
private static Set<Session> user = new CopyOnWriteArraySet<>();
@OnOpen//Lors de la connexion avec un client
public void onOpen(Session mySession) {
System.out.println("connect ID:"+mySession.getId());//session.getId():Obtenir l'identifiant de session
user.add(mySession);//Ajouter une session par client à la liste
}
@OnMessage//Lorsque les données sont envoyées par le client
public void onMessage(String text , Session mySession) {//Les arguments sont le texte envoyé et la session de la source
System.out.println(text);
//getAsyncRemote(): Obtenez une instance de RemoteEndpoint
//sendText(String): Envoyer un texte au client
for (Session user : user) {
user.getAsyncRemote().sendText(text);
System.out.println(user.getId()+"Seconde"+mySession.getId()+"J'ai envoyé le deuxième message!");
}
if(text.equals("bye")) onClose(mySession);//Déconnecter si le texte est "au revoir"
}
@OnClose//Lorsque le client se déconnecte
public void onClose(Session mySession) {
System.out.println("disconnect ID:"+mySession.getId());
user.remove(mySession);//Supprimer la session client déconnectée de la liste
try {
mySession.close();//Fermer avec la méthode close
} catch (IOException e) {
System.err.println("Une erreur est survenue: " + e);
}
}
}
Ajouter l'annotation Endpoint @ServerEndpoint à la classe et décrire le chemin du contexte
@ServerEndpoint(value = "/wSck")
Créez une liste qui identifie chaque client
private static Set<Session> user = new CopyOnWriteArraySet<>();
user.add(mySession);
Quatre. méthode onMessage: envoyer le texte reçu au client tel quel
⇒ Envoyer à tous les clients connectés avec pour déclaration
user.getAsyncRemote().sendText(text);
Cinq. méthode onClose: supprimer le client déconnecté
5-1. Supprimer de la liste des utilisateurs: ʻuser.remove (mySession); 5-2. Supprimer la session et déconnecter:
mySession.close ();`
Modifiez l'adresse du programme client et exécutez-le avec un navigateur Web.
var wSck = new WebSocket (" ws: // localhost: 8080 / nom du projet / chemin du contexte ");
(Cette fois " ws: // localhost: 8080 / freeWeb2 / wSck "
)Une application de chat qui affiche le contenu envoyé est terminée. Il prend également en charge l'accès à partir de plusieurs navigateurs.
La communication par socket était très facile à faire en utilisant l'API. Par rapport à celui décrit dans l'article précédent, la quantité de code écrit est d'environ 1/4. C'est incroyable. Super facile.
En outre, il semble que le codage, le décodage, le traitement et la gestion des données json puissent être effectués facilement. Je ne l'ai pas utilisé cette fois, mais il sera nécessaire pour un développement à grande échelle. Voir la page de référence pour plus de détails.
Recommended Posts