웹소켓 연동에서 STOMP를 사용할 때, 일반적으로 클라이언트의 메시지를 받기 위한 컨트롤러를 작성합니다. 이 컨트롤러는 `@MessageMapping` 애노테이션을 사용하여 클라이언트에서 보낸 메시지를 받습니다. 그리고 `SimpMessagingTemplate`를 사용하여 원하는 채팅방에 메시지를 보낼 수 있습니다.
예를 들어, 아래와 같이 구현할 수 있습니다:
```java
@Controller
public class ChatController {
private final SimpMessagingTemplate messagingTemplate;
@Autowired
public ChatController(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@MessageMapping("/chat")
public void receiveMessage(ChatMessage message) {
// 메시지를 받는 로직
sendMessageToChatRoom(message.getChatRoomId(), message);
}
public void sendMessageToChatRoom(String chatRoomId, ChatMessage message) {
// 원하는 채팅방에 메시지를 보내는 로직
this.messagingTemplate.convertAndSend("/topic/chatroom/" + chatRoomId, message);
}
}
```
위 코드에서 `ChatMessage`는 채팅 메시지와 관련된 정보를 담는 클래스입니다. `chatRoomId`는 메시지를 보낼 채팅방의 ID를 나타냅니다.
`@MessageMapping("/chat")` 애노테이션이 붙은 `receiveMessage` 메소드는 클라이언트가 `/app/chat` 주소로 메시지를 보내면 호출됩니다.
`sendMessageToChatRoom` 메소드는 `SimpMessagingTemplate`의 `convertAndSend` 메소드를 사용하여 특정 채팅방으로 메시지를 보냅니다. 이 때, `"/topic/chatroom/" + chatRoomId`는 메시지를 보낼 주소를 나타냅니다.
이렇게 하면 일반 컨트롤러를 사용하여 클라이언트의 메시지를 받고, 원하는 채팅방에 메시지를 보낼 수 있습니다.
-----------------
@PostMappding으로 받고 sendMessageToChatRoom 을 호출 할 수는 없을 까?
-----------------
네, `@PostMapping`을 사용하여 HTTP 요청을 받고 웹소켓을 통해 메시지를 보낼 수 있습니다. 이 경우에는 일반적인 HTTP 요청을 처리하는 방식과 동일하게 `@PostMapping` 애노테이션을 사용하면 되며, 메시지를 보낼 때 `SimpMessagingTemplate`를 사용합니다.
다음은 이를 구현한 예시입니다:
```java
@RestController
public class ChatController {
private final SimpMessagingTemplate messagingTemplate;
@Autowired
public ChatController(SimpMessagingTemplate messagingTemplate) {
this.messagingTemplate = messagingTemplate;
}
@PostMapping("/chat")
public void sendMessage(ChatMessage message) {
// 원하는 채팅방에 메시지를 보내는 로직
this.messagingTemplate.convertAndSend("/topic/chatroom/" + message.getChatRoomId(), message);
}
}
```
위 코드에서 `ChatMessage`는 채팅 메시지와 관련된 정보를 담는 클래스입니다. `chatRoomId`는 메시지를 보낼 채팅방의 ID를 나타냅니다.
`@PostMapping("/chat")` 애노테이션이 붙은 `sendMessage` 메소드는 클라이언트가 `/chat` 주소로 HTTP POST 요청을 보내면 호출됩니다. 이 메소드는 클라이언트로부터 받은 메시지를 원하는 채팅방으로 보냅니다.
이렇게 하면 `@PostMapping`을 사용하여 클라이언트의 요청을 받고, 웹소켓을 통해 원하는 채팅방에 메시지를 보낼 수 있습니다.
'오늘의 CHATGPT' 카테고리의 다른 글
nginx 무정지 로드밸런싱 교체. (0) | 2023.07.20 |
---|---|
vi 주석 파란색으로 다른색으로 좀 바꿔줘 (0) | 2023.06.29 |
curl post json requestBody example (0) | 2023.06.29 |
local profile 에서는 spring session을 쓰고 싶지 않아. (0) | 2023.06.26 |
java for문안의 switch에서 continue; 사용하면 어떻게 되나? (0) | 2023.06.13 |
java.util.zip.ZipEntry.getSize() 의 반환값은 무슨 단위야? (0) | 2023.06.13 |
논리erd와 물리erd가 구분되는 이유는 뭐지? (0) | 2023.06.12 |
java ZipEntry 의 getName 할 때 directory 구분기호가 뭐야? (0) | 2023.06.12 |