在Spring Boot和Vuejs中使用Websocket的最佳方法

时间:2019-10-23 05:39:40

标签: java spring spring-boot vue.js websocket

我尝试将Websocket与spring boot后端(作为API)和Vuejs前端一起使用。

我以一个简单的用例来揭露我的问题。一些用户已登录我的网站,并且具有消息传递功能。用户A向用户B发送一条消息。用户B实际上已登录,我想通知用户B新消息已到达。

我发现使用websockets的3种方法:

1-当用户A发送消息时,会向API调用Axios帖子以保存消息,如果Axios响应成功,我会调用

this.stompClient.send("/app/foo", JSON.stringify(bar), {})

2-当用户A发送邮件时,我仅拨打

之类的电话
this.stompClient.send("/app/foo", JSON.stringify(bar), {})

这是我的控制器的方法(用@MessageMapping(“ / xxxx”注释)@SendTo(“ / topic / yyyy”)注释),它首先调用Facade,Service,Dao,然后保存消息,然后将消息返回给订阅者

3-我保留我的实际控制器,外观,服务和DAO,并在保存成功后添加:

@Autowired SimpMessagingTemplate webSocket; 
...
@GetMapping("/send-message")
public ResponseEntity sendMessage(@AuthenticationPrincipal User user, ....) {
    service.saveMessage(....);
    webSocket.convertAndSend("/ws/message-from", message);

没有新的控制器,则包含@MessageMapping(“ / xxxx”)@SendTo(“ / topic / yyyy”)。用户B刚刚加入了“ / ws / message-from”

你能帮我吗?

在3种方式中有一种好的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

一种方法和第二种方法没有什么区别,因为您使用npm中的axios发送请求,而另一种方法可以直接使用,而第三种方法则使用控制器和Facade dao在单个位置。它涉及体系结构以及如何使用您希望根据要求发送对框架的请求。

在您有特定要求之前,它们在各自的水平上均能发挥最佳作用。

建议使用axios。 它具有以下优点:

supports older browsers (Fetch needs a polyfill)
has a way to abort a request
has a way to set a response timeout
has built-in CSRF protection
supports upload progress
performs automatic JSON data transformation
works in Node.js
相关问题