web-dev-qa-db-ja.com

Spring Web-Socket経由で定期的にクライアントにメッセージを送信する

私はSpring webSocketを介してクライアントとサーバー間の接続を確立しようとしていますが、 this link の助けを借りてこれを行っています。 Controllerがクライアントに「hello」を5秒ごとに送信し、クライアントが毎回それをグリーティングボックスに追加するようにします。これはコントローラークラスです。

@EnableScheduling
@Controller
public class GreetingController {

    @Scheduled(fixedRate = 5000)
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting() throws Exception {
        Thread.sleep(1000); // simulated delay
        System.out.println("scheduled");
        return new Greeting("Hello");
    }

}

そして、これはapp.jspのConnect()関数です。

function connect() {
    var socket = new SockJS('/gs-guide-websocket');
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function (frame) {
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.send("/app/hello", {}, JSON.stringify({'name': "connect"}));
        stompClient.subscribe('/topic/greetings', function (message) {
            console.log("message"+message);
             console.log("message"+(JSON.parse(message.body)));

            showGreeting(JSON.parse(message.body).content);
        });
    });
}

index.jspがロードされ、接続ボタンを押したときに、あいさつで挨拶を1回だけ送信した場合、クライアントに5秒ごとに「hello」メッセージを表示させるにはどうすればよいですか?

15
user5621266

documentation のこの部分を参照してください。メッセージの送信方法はまったく間違っています。上記のクラスを次のように変更します。

@EnableScheduling
@Controller
public class GreetingController {

    @Autowired
    private SimpMessagingTemplate template;

    @Scheduled(fixedRate = 5000)
    public void greeting() {
        Thread.sleep(1000); // simulated delay
        System.out.println("scheduled");
        this.template.convertAndSend("/topic/greetings", "Hello");
    }

}
29
Andrei Balici