WebSocket은 컴퓨터 통신 프로토콜로 단일 TCP 연결을 통해 전이중 통신 채널을 제공합니다. WebSocket은 HTTP와 다릅니다. 이 프로토콜을 사용하면 웹 브라우저 (또는 다른 클라이언트 응용 프로그램)와 HTTP 폴링과 같은 반 듀플렉스 대안보다 오버 헤드가 낮은 웹 서버 간의 상호 작용을 가능하게하여 서버에서 실시간 데이터 전송을 용이하게합니다.
클라이언트와 서버간에 WebSocket 연결이 설정되면 당사자가 연결을 닫을 때까지 정보를 교환 할 수 있습니다.
이것은 낮은 대기 시간을 가진 고주파수에서 작동하는 채팅과 유사한 통신 서비스를 구축 할 때 WebSocket이 HTTP 프로토콜보다 선호되는 주요 재평가입니다.
이전에 TTMP로 알려진 간단한 (또는 스트리밍) 텍스트 지향 메시지 프로토콜 (Stomp)은 메시지 지향 미들웨어 (MOM)로 작업하도록 설계된 간단한 텍스트 기반 프로토콜입니다. 상호 운용 가능한 와이어 형식을 제공하여 Stomp 클라이언트가 프로토콜을 지원하는 메시지 브로커와 대화 할 수 있습니다.
WebSocket은 통신 프로토콜 일 뿐이므로 특정 사용자에게 메시지를 보내는 방법을 모릅니다. Stomp는 기본적으로 이러한 기능에 유용한 메시징 프로토콜입니다.
응용 프로그램에는 Spring Initializr을 사용하여 설정할 수있는 다음 구성이 있습니다.
Java 버전 : 11
유형 : Maven Project
종속성 : WebSocket
스프링 부트 버전 : 2.4.2
WebSocket 엔드 포인트 및 메시지 중개인 구성은 상당히 간단합니다.
@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 주석은 WebSocket 서버를 활성화하는 데 사용됩니다.
WebSocketMessageBrokerConfigurer 인터페이스는 WebSocket 연결을 구성하기위한 일부 메소드에 대한 구현을 제공하는 데 사용됩니다.
regis
ConfigureMessageBroker 메소드는 한 클라이언트에서 다른 클라이언트로 메시지를 라우팅하는 데 사용되는 메시지 브로커를 구성하는 데 사용됩니다.
SOCKJS는 또한 WebSocket을 지원하지 않는 브라우저의 폴백 옵션을 활성화하는 데 사용됩니다.
채팅 모델은 응용 프로그램의 클라이언트 측과 서버 측에서 교환되는 메시지 페이로드입니다.
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;
}
}
당사의 컨트롤러는 채팅 응용 프로그램에있는 모든 메시지 메소드를 처리하여 기본적으로 한 클라이언트로부터 메시지를 수신 한 다음 다른 클라이언트로 방송 할 책임이 있습니다.
@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;
}
}
대상 지점으로 /앱을 사용하는 것은 WebSocket 구성 파일로 인해 모든 메시지가 @MessAgemapping과 주석이 붙은 이러한 처리 메소드로 라우팅됩니다.
당사의 UI는 HTML 및 CSS를 사용하여 구축 된 간단한 카드 상자이며 일부 JS 기능을 실행하여 메시지를 보내고 수신합니다.