通过 Spring Web-Socket 定期向客户端发送消息
Sending message to client periodically via Spring Web-Socket
我正在尝试通过 Spring webSocket 在客户端和服务器之间建立连接,我是在 this link 的帮助下完成的。
我希望 Controller 每 5 秒向客户端发送一个 "hello" 并且客户端每次都将其附加到问候语框。
这是控制器 class:
@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 加载并且我按下连接按钮时,只有一次它在问候语中添加了你好,我应该如何让客户端每 5 秒显示一次 "hello" 消息?
请参考这部分documentation。
您尝试发送消息的方式完全错误。
我会修改你上面的 class 如下:
@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");
}
}
我正在尝试通过 Spring webSocket 在客户端和服务器之间建立连接,我是在 this link 的帮助下完成的。 我希望 Controller 每 5 秒向客户端发送一个 "hello" 并且客户端每次都将其附加到问候语框。 这是控制器 class:
@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 加载并且我按下连接按钮时,只有一次它在问候语中添加了你好,我应该如何让客户端每 5 秒显示一次 "hello" 消息?
请参考这部分documentation。 您尝试发送消息的方式完全错误。 我会修改你上面的 class 如下:
@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");
}
}