spring socket 통신 예제

Comments 0 by
August 2, 2019

STOMP는 엔터프라이즈 메시지 브로커에 연결하기 위해 Ruby, Python 및 Perl과 같은 스크립팅 언어를 위해 처음에 만들어진 간단한 텍스트 기반 메시징 프로토콜입니다. STOMP 덕분에 서로 다른 언어로 개발된 고객과 브로커는 서로 메시지를 보내고 받을 수 있습니다. WebSocket 프로토콜을 웹용 TCP라고도 합니다. 유사하게, STOMP는 웹에 대한 HTTP라고합니다. 웹 소켓 프레임에 매핑되는 소수의 프레임 유형(예: CONNECT, 구독, 구독 취소, ACK 또는 SEND)을 정의합니다. 한편으로는 이러한 명령은 통신을 관리하는 데 매우 유용하며, 다른 한편으로는 메시지 승인과 같은 보다 정교한 기능을 갖춘 솔루션을 구현할 수 있습니다. 이제 위의 예에서 Java 코드에서 보낼 수있는 개인 메시지를 받을 수있는 JavaScript (SockJS) 클라이언트를 구현하는 방법을 살펴 보겠습니다. WebSockets는 HTML5 사양의 일부이며 대부분의 최신 브라우저에서 지원된다는 것을 아는 것이 좋습니다 (Internet Explorer는 버전 10부터 지원합니다). 첫 번째 방법에서는 클라이언트가 웹소켓 서버에 연결하는 데 사용할 웹소켓 끝점을 등록합니다. 세션커넥트이벤트 – 웹소켓 클라이언트가 연결될 때마다.

configureMessageBroker() 메서드는 WebSocketMessageBrokerConfigurer에서 기본 메서드를 구현하여 메시지 브로커를 구성합니다. 간단한 메모리 기반 메시지 브로커가 “/topic”로 접두번된 대상에서 인사말 메시지를 클라이언트로 다시 전달할 수 있도록 enableSimpleBroker()를 호출하는 것으로 시작합니다. 또한 @MessageMapping 개의 추가된 메서드에 바인딩된 메시지에 대해 “/app” 접두사를 지정합니다. 이 접두사는 모든 메시지 매핑을 정의하는 데 사용됩니다. 예를 들어 “/app/hello”는 GreetingController.greeting() 메서드가 처리하도록 매핑되는 끝점입니다. 따라서 ping 요청에만 도움이되지만 채팅 서버를 구현하고 서버와 클라이언트 간의 지속적인 통신이 반드시 필요할 것이라고 상상해보십시오. 서버 쪽은 Java에서만 코딩됩니다. 그러나 클라이언트의 경우 일반적으로 WebSockets 클라이언트가 프런트 엔드 응용 프로그램에 포함되기 때문에 Java 및 JavaScript (SockJS)로 작성된 스니펫을 표시합니다. 코드 예제에서는 pub-sub 모델을 사용하여 여러 사용자에게 메시지를 브로드캐스트하는 방법과 단일 사용자에게만 메시지를 보내는 방법을 보여 줍니다. 이 문서의 다른 부분에서는 WebSocket 보안에 대해 간략하게 설명하고 환경이 WebSocket 프로토콜을 지원하지 않는 경우에도 WebSocket 기반 솔루션이 계속 작동하도록 하는 방법에 대해 간략하게 설명합니다. 다음 섹션에서는 이 간단한 예제를 사용하여 소켓 통신을 해부하고 자세한 예제를 통해 세부 정보를 자세히 살펴보겠습니다.

웹소켓 서버에 사용되는 스프링 프레임워크는 서버와 클라이언트 모두에 대해 WebSocket용 모듈을 제공합니다. 이 모듈은 스프링에 의해 정의된 주석으로 쉽게 구성할 수 있습니다. Spring은 또한 POPO와의 메시지 직렬화 및 serialization을 처리합니다. 스프링 부트를 사용하면 실행 가능한 JAR 내부에서 생산 등급의 스프링 응용 프로그램을 만들 수 있습니다. 대부분의 웹 응용 프로그램은 쿠키 기반 인증을 사용합니다. 예를 들어 Spring Security를 사용하여 특정 페이지 또는 컨트롤러에 대한 액세스를 기록된 사용자로만 제한할 수 있습니다. 그런 다음 나중에 해당 사용자를 위해 만든 WebSocket 또는 SockJS 세션과 연결된 쿠키 기반 HTTP 세션을 통해 사용자 보안 컨텍스트가 유지됩니다. WebSockets 끝점은 봄의 WebSecurityConfigurerAdapter에서 와 같은 다른 요청으로 보호할 수 있습니다.

이 예제는 나중에 기사에서 무엇을 기대해야하는지 에 대한 느낌을 주기 위한 것이기 때문에 여기서 무슨 일이 일어나고 있는지 완전히 이해하지 못한다면 걱정하지 마십시오. registerStompEndpoints() 메서드는 “/gs-guide-websocket” 끝점을 등록하므로 WebSocket을 사용할 수 없는 경우 대체 전송을 사용할 수 있도록 SockJS 대체 옵션을 사용할 수 있습니다.