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 ...
Beschreibt die grundlegende WebSocket-API. Es gibt viele andere APIs als die hier vorgestellten, aber Sie können bei Bedarf googeln.
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/Kontextpfad")
public class SanpleEndpoint {
}
/*
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) {
}
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);
}
}
}
@ServerEndpoint(value = "/wSck")
Erstellen Sie eine Liste, die jeden Client identifiziert
private static Set<Session> user = new CopyOnWriteArraySet<>();
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 ();
Ändern Sie die Adresse des Client-Programms und führen Sie es mit einem Webbrowser aus.
Eine Chat-App, die den gesendeten Inhalt anzeigt, ist abgeschlossen. Es unterstützt auch den Zugriff von mehreren Browsern.
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.