u014400363
2019-10-08 14:51 浏览 1.9k

关于SpringBoot集成WebSocket后使用stomp发送消息对应路径未能成功接收到消息

自己尝试着搭建Springboot聊天室的项目,后台websocket配置如下

@Configuration
@EnableWebSocketMessageBroker //允许stomp协议
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/stomp")   //添加STOMP协议的端点。// 这个URL是供WebSocket客户端或SockJS客户端连接服务端访问的地址。
         .setAllowedOrigins("*").addInterceptors(new HttpSessionHandshakeInterceptor()). //添加允许跨域访问
         withSockJS();  //指定端点使用SockJS协议
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/topic,/queue") //服务器推送给客户端的前缀
                .enableSimpleBroker("/app");  //客户端发送给服务端的前缀
    }

}

消息接收类的代码如下

@Controller
public class MessageController {

    @MessageMapping("/test")
    @SendTo("/topic/hhh")
    public String sendMessage(Map<String,Object> map){
        return "miao";
    }
}

理论上前台应该发送消息到/api/test时Controller类应该能接收到消息,但是发送消息后未能进入controller类

html就不贴了,js前端代码如下

window.onload=function(){
   var sockJs=new SockJS("/stomp");
   var stomp=Stomp.over(sockJs);
   stomp.connect({},function (frame) {
       console.log(frame);
       stomp.subscribe("/topic/hhh",function (data) {
           console.log(data)
       });
   })

   document.getElementById("sendMesssage").onclick=function () {
       console.log(stomp.connected);
       var message=document.getElementById("talkMessage");
       stomp.send("/app/test",{},JSON.stringify({"message":message}));
   }
}

连接完成时frame的控制台日志打印如下
Frame {command: "CONNECTED", headers: {…}, body: ""}
body: ""
command: "CONNECTED"
headers:
heart-beat: "0,0"
version: "1.1"
proto: Object
proto: Object
send时并没有断开连接,为啥发送不到对应地址?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • dabocaiqq dabocaiqq 2019-10-08 22:11
    点赞 1 评论 复制链接分享
  • ch999999999999999999 ch999999999999999999 2020-07-27 23:43

    设置反了
    registry.setApplicationDestinationPrefixes("/topic,/queue") //服务器推送给客户端的前缀
    .enableSimpleBroker("/app"); //客户端发送给服务端的前缀

    点赞 评论 复制链接分享

相关推荐