[SPRING] Spring을 사용하여 websocket을 통해 클라이언트에게 메시지를 보내는 방법
SPRINGSpring을 사용하여 websocket을 통해 클라이언트에게 메시지를 보내는 방법
나는 websocket과 함께 Spring을 사용하려고한다. 이 튜토리얼을 통해 조사를 시작했습니다.
내 사이드 클라이언트에서 나는 서버에 연결을 초기화하는 것과 비슷한 것을 가지고있다.
function connect() {
var socket = new SockJS('/myphotos/form');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
});
}
그것은 내 컨트롤러에서 다음과 같은 클래스에서 내 프로세스를 수행 할 수있어 훌륭합니다.
@Controller
@RequestMapping("/")
public class PhotoController {
@MessageMapping("/form")
@SendTo("/topic/greetings")
public Greeting validate(AddPhotosForm addPhotosForm) {
return new Greeting("Hello world !");
}
}
이제 내가 원하는 것은 "/ topic / greeting"을 듣는 클라이언트에게 메시지를 보내는 쓰레드가있는 것입니다. 나는 다음과 같이 Runnable 클래스를 작성했다.
public class FireGreeting implements Runnable {
private PhotoController listener;
public FireGreeting(PhotoController listener) {
this.listener = listener;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep( 2000 );
listener.fireGreeting();
} catch ( InterruptedException e ) {
e.printStackTrace();
}
}
}
}
그리고 내 컨트롤러 완성 :
@Controller
@RequestMapping("/")
public class PhotoController {
@MessageMapping("/form")
@SendTo("/topic/greetings")
public Greeting validate(AddPhotosForm addPhotosForm) {
// added this part
FireGreeting r = new FireGreeting( this );
new Thread(r).start();
return new Greeting("Hello world !");
}
// added this method
@SendTo("/topic/greetings")
public Greeting fireGreeting() {
System.out.println("Fire");
return new Greeting("Fire");
}
}
내가 원하는대로 PhotoController.fireGreeting 메서드가 호출되지만 클라이언트 측에서 아무 일도 일어나지 않습니다. 어떤 제안? 고맙습니다.
해결법
-
==============================
1.@Boris the Spider 덕분에 문제를 해결할 수있었습니다. 올바른 해결책은 다음과 같이하는 것입니다.
@Boris the Spider 덕분에 문제를 해결할 수있었습니다. 올바른 해결책은 다음과 같이하는 것입니다.
@Controller @RequestMapping("/") public class PhotoController { @Autowired private SimpMessagingTemplate template; @MessageMapping("/form") @SendTo("/topic/greetings") public Greeting validate(AddPhotosForm addPhotosForm) { FireGreeting r = new FireGreeting( this ); new Thread(r).start(); return new Greeting("Hello world !"); } public void fireGreeting() { System.out.println("Fire"); this.template.convertAndSend("/topic/greetings", new Greeting("Fire")); } }
from https://stackoverflow.com/questions/28250719/how-to-send-message-to-client-through-websocket-using-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] spring mvc를 사용하여 webapp / resources / images 디렉토리에 이미지를 업로드하는 방법은 무엇입니까? (0) | 2019.04.12 |
---|---|
[SPRING] Flux <DataBuffer>를 올바르게 읽고 단일 inputStream으로 변환하는 방법 (0) | 2019.04.12 |
[SPRING] 스프링 부트 컨트롤러 404 (0) | 2019.04.12 |
[SPRING] spring-test-mvc jsonpath를 사용하여 테스트가 null을 반환합니다. (0) | 2019.04.12 |
[SPRING] 스프링 통합 유닛 테스트 아웃 바운드 채널 어댑터 (0) | 2019.04.12 |