본문 바로가기

Spring Boot

springboot로 소켓통신 멀티룸 채팅 소스

반응형

먼저, 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
  }));
}

사용자 인증확인, 메시지 기록 또는 룸 관리와 같은 기능을 추가하여 이 예를 확장할 수 있습니다.

반응형