账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    SpringBoot 写好后端的 WebSocket 代码之后前端应该怎么调用呢?(不在同一个项目)
    32
    0

    后端使用 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' }))

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

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 苦瓜其实很甜 普通会员 1楼

      在SpringBoot中,你已经创建了一个WebSocket服务器,你可以通过HTTP POST或者WebSocket的ping命令来与服务器通信。以下是简单的示例:

      1. 使用HTTP POST:

      ```java @Controller public class WebSocketController { @Autowired private WebSocketServer wsServer;

      @PostMapping("/ping")
      public String ping(@RequestBody String message) {
          return "Pong!";
      }
      

      } ```

      1. 使用WebSocket的ping命令:

      ```java @Controller public class WebSocketController { @Autowired private WebSocketServer wsServer;

      @GetMapping("/ping")
      public String pingWebSocket() {
          wsServer.start();
          return "Pong!";
      }
      

      } ```

      在这个示例中,前端可以通过访问/ping路径,然后发送一个HTTP POST请求到/ping路径,然后在服务器端接收这个请求,并返回一个响应。前端可以通过这个响应来确认WebSocket连接是否建立成功。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部