WebSocket ist ein Computerkommunikationsprotokoll und bietet Full-Duplex-Kommunikationskanäle über eine einzelne TCP-Verbindung. WebSocket unterscheidet sich von HTTP. Das Protokoll ermöglicht die Interaktion zwischen einem Webbrowser (oder einer anderen Client-Anwendung) und einem Webserver mit niedrigerem Overhead als Half-Duplex-Alternativen wie HTTP-Umfragen, wodurch die Echtzeit-Datenübertragung vom und zum Server erleichtert wird.
Sobald eine WebSocket -Verbindung zwischen einem Client und einem Server hergestellt wurde, können beide Informationen austauschen, bis die Verbindung von einer der Parteien geschlossen wird.
Dies ist die Hauptversicherung, die WebSocket gegenüber dem HTTP-Protokoll beim Erstellen eines Chat-ähnlichen Kommunikationsdienstes bevorzugt wird, der mit hoher Frequenzen mit geringer Latenz arbeitet.
Einfache (oder Streaming) textorientiertes Nachrichtenprotokoll (Stomp), früher als TTMP bekannt, ist ein einfaches textbasiertes Protokoll, das für die Arbeit mit meldungsorientierter Middleware (MOM) entwickelt wurde. Es bietet ein interoperables Drahtformat, mit dem Stomp -Clients mit jedem Message Broker sprechen können, der das Protokoll unterstützt.
Da WebSocket nur ein Kommunikationsprotokoll ist, weiß es nicht, wie man eine Nachricht an einen bestimmten Benutzer sendet. Stomp ist im Grunde ein Messaging -Protokoll, das für diese Funktionen nützlich ist.
Unsere Anwendung hat die folgende Konfiguration, die mit Spring Initializr eingestellt werden kann:
Java -Version: 11
Typ: Maven -Projekt
Abhängigkeiten: Websocket
Feder -Boot -Version: 2.4.2
Das Konfigurieren unseres WebSocket -Endpunkts und unserem Message Broker ist ziemlich einfach.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
}
@EnableWebSocketMessageBroker Annotation wird verwendet, um unseren WebSocket -Server zu aktivieren.
WebSocketMessageBrokerConFigurer -Schnittstelle wird verwendet, um eine Implementierung für einige seiner Methoden zur Konfiguration der WebSocket -Verbindung bereitzustellen.
Die Methode für RegisterStOpendPoints wird verwendet, um einen WebSocket -Endpunkt zu registrieren, mit dem die Clients eine Verbindung zum Server herstellen können.
Die KonfiguremessageBroker -Methode wird verwendet, um unseren Message Broker zu konfigurieren, mit dem Nachrichten von einem Client zu einem anderen weitergeleitet werden.
SockJS wird auch verwendet, um Fallback -Optionen für Browser zu ermöglichen, die WebSocket nicht unterstützen.
Unser Chat -Modell ist die Nachrichtennutzlast, die zwischen der Client -Seite und der Serverseite der Anwendung ausgetauscht wird.
public class ChatMessage {
private String content;
private String sender;
private MessageType type;
public enum MessageType {
*CHAT*, *LEAVE*, *JOIN
*}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}
Unser Controller ist dafür verantwortlich, alle in unserer Chat -Anwendung vorhandenen Nachrichtenmethoden zu bearbeiten, die im Grunde genommen Nachrichten von einem Client empfangen und dann an andere übertragen werden.
@Controller
public class ChatController {
@MessageMapping("/chat.register")
@SendTo("/topic/public")
public ChatMessage register(@Payload ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) {
headerAccessor.getSessionAttributes().put("username", chatMessage.getSender());
return chatMessage;
}
@MessageMapping("/chat.send")
@SendTo("/topic/public")
public ChatMessage sendMessage(@Payload ChatMessage chatMessage) {
return chatMessage;
}
}
Die Verwendung von /App als Zielpunkt ist auf unsere WebSocket -Konfigurationsdatei zurückzuführen, die besagt, dass alle Nachrichten in diese mit @MessAgemaping kommentierten Handhabungsmethoden weitergeleitet werden.
Unsere Benutzeroberfläche ist eine einfache Kartenbox, die mit HTML und CSS erstellt wurde und einige JS -Funktionen zum Senden und Empfangen von Nachrichten ausführt.