【Java】SpringBoot 写好后端的 WebSocket 代码之后前端应该怎么调用呢?(不在同一个项目)
后端使用 SpringBoot 集成的 WebSocket 服务
Java 代码如下:
配置 WebSocket
@Configuration@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/endpointSang").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
}
}
WebSocket 控制器
@Controllerpublic class WsController {
@MessageMapping("/welcome")
@SendTo("/topic/getResponse")
public ResponseMessage say(RequestMessage message) {
System.out.println(message.getName());
return new ResponseMessage("welcome," + message.getName() + " !");
}
}
现在前端进行连接时会抛出异常
var ctx = 'ws://localhost:8080'// 创建一个 Scoket 端点连接
var socket = new SockJS(`${ctx}/endpointSang`)
var stompClient = Stomp.over(socket)
// 链接到端点
stompClient.connect({}, frame => {
console.log('连接到:', frame)
stompClient.subscribe(`${ctx}/topic/getResponse`, response => {
console.log('订阅的主题发送了消息:', JSON.parse(response.body).responseMessage)
})
})
// 通过端点客户端发送一个消息到服务器
stompClient.send(`${ctx}/welcome`, {}, JSON.stringify({ name: 'rx' }))
// 抛出的异常
main.js:73 Uncaught SyntaxError: The URL's scheme must be either 'http:' or 'https:'. 'ws:' is not allowed.
at new SockJS (main.js:73)
at simple-websocket.html:17
但如果是在后端项目下的话就可以使用下面的代码进行调用
// 这里是空的,不需要指定前缀var ctx = ''
// 创建一个 Scoket 端点连接
var socket = new SockJS(`${ctx}/endpointSang`)
var stompClient = Stomp.over(socket)
// 链接到端点
stompClient.connect({}, frame => {
console.log('连接到:', frame)
stompClient.subscribe(`${ctx}/topic/getResponse`, response => {
console.log('订阅的主题发送了消息:', JSON.parse(response.body).responseMessage)
})
})
// 通过端点客户端发送一个消息到服务器
stompClient.send(`${ctx}/welcome`, {}, JSON.stringify({ name: 'rx' }))
所以,发生了什么?吾辈应该怎么做呢?
回答
最近写过类似的,自定义配置拦截器和广播消息前缀
然后业务层使用消息模板,其他照常
@Autowiredprivate SimpMessagingTemplate messagingTemplate;
messagingTemplate.convertAndSend("/topic/notice", string);
异常里已经说明了,应该用http的地址去链接,既然是sockjs,就不能用ws和wss地址了。
推测是java的配置没有做好,鉴于java已经忘光了,楼主参考一下https://blog.csdn.net/wobuaiz...
https://blog.csdn.net/Mars_we... 此篇里面说了注意导入socketjs时要使用地址全称,并且连接使用的是http而不是websocket的ws
以上是 【Java】SpringBoot 写好后端的 WebSocket 代码之后前端应该怎么调用呢?(不在同一个项目) 的全部内容, 来源链接: utcz.com/a/88209.html