gpt4 book ai didi

spring - 如何使用 Spring 通过 websocket 向客户端发送消息

转载 作者:IT老高 更新时间:2023-10-28 13:50:39 24 4
gpt4 key购买 nike

我尝试将 Spring 与 websocket 一起使用。我从 this tutorial 开始我的调查。 .

在我的客户端中,我有类似的东西来初始化与服务器的连接:

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 中,我可以在以下类中执行我的过程:

@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 :

@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 被调用,但客户端没有发生任何事情。有什么建议么 ?谢谢。

最佳答案

感谢@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"));
}
}

关于spring - 如何使用 Spring 通过 websocket 向客户端发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com