반응형
먼저, WebSockets를 종속성으로 하는 Spring Boot 프로젝트를 생성합니다. Spring Initializer 웹 사이트 또는 다음 Maven 명령을 사용할 수 있습니다.
mvn spring-boot:create -DgroupId=com.example -DartifactId=chat-app -Ddependencies=websocket
응용프로그램에서 WebSocket을 활성화하고 구성하는 WebSocket 구성 클래스를 만듭니다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/room");
}
}
수신 메시지를 처리하고 지정된 대화방으로 브로드캐스트하는 WebSocket 컨트롤러 클래스를 만듭니다.
@Controller
public class ChatController {
private final SimpMessageSendingOperations messagingTemplate;
@Autowired
public ChatController(SimpMessageSendingOperations messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@MessageMapping("/chat.sendMessage")
public void sendMessage(@Payload ChatMessage chatMessage) {
messagingTemplate.convertAndSend("/room/" + chatMessage.getRoomId(), chatMessage);
}
}
메시지 페이로드를 나타내는 ChatMessage 모델 클래스 만들기.
public class ChatMessage {
private String content;
private String sender;
private String roomId;
// getters and setters ...
}
마지막으로 WebSocket 엔드포인트에 연결하여 메시지를 보내고 받는 JavaScript 파일을 만듭니다.
const socket = new SockJS('/ws');
const stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
console.log('Connected: ' + frame);
stompClient.subscribe('/room/' + roomId, function(chatMessage) {
// handle incoming message ...
});
});
function sendMessage() {
stompClient.send("/app/chat.sendMessage", {}, JSON.stringify({
content: document.querySelector('#content').value,
sender: document.querySelector('#sender').value,
roomId: roomId
}));
}
사용자 인증확인, 메시지 기록 또는 룸 관리와 같은 기능을 추가하여 이 예를 확장할 수 있습니다.
반응형
'Spring Boot' 카테고리의 다른 글
WebRTC에서 RTMP서버로 송출하는 예제 (0) | 2023.02.08 |
---|---|
[flask] 멀티채팅룸생성, 채팅창 상세화면 구현. flask chat serveer (0) | 2023.02.08 |
[spring boot] PDF 출력 - iText7_02(TEXT) (0) | 2023.02.08 |
[JAVA] POI 를 이용하지않고 pdfbox를 이용한 pdf 출력[초간단] (0) | 2023.02.07 |
[Nginx] nginx에서 rtmp를 트랜스코딩 하는 방법 480p, 720p, 1080p (0) | 2023.02.07 |