【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 控制器

@Controller

public 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' }))

所以,发生了什么?吾辈应该怎么做呢?

回答

最近写过类似的,自定义配置拦截器和广播消息前缀

【Java】SpringBoot 写好后端的 WebSocket 代码之后前端应该怎么调用呢?(不在同一个项目)

然后业务层使用消息模板,其他照常

@Autowired

private 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

回到顶部