webSocket 发送消息给客户端

  1. 在配置websocket代理时使用simpleBroker(简单代理),就不需要使用消息服务器,简单向前端发送消息:
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/client");
    }

     

  2. @SendTo 注解可以将消息发送给所有订阅此地址的客户端;如果不需要将消息发给所有的用户,则可以使用@SendToUser,(如果一个用户在多个浏览器登陆,则会将消息发给所有客户端,如果不需要发送给所有的,可以设置broadcast=false)
        @MessageMapping("/send")
        @SendToUser(destinations = "/client", broadcast = false)
        public String ws(Principal principal, String msg) {
    
            // 客户端订阅的地址是 /user/client
            // 服务端@SendToUser发送的代理地址是 /client, 地址将会被转化为 /user/{username}/client
            System.out.println(principal);
            System.out.println(msg);
    
            return msg;
        }

     

  3. 如果服务端要将消息发送给特定的某一个用户,可以使用SimpleMessageTemplate的convertAndSendToUser方法(第一个参数是用户的登陆名username)
        @MessageMapping("/send")
    //    @SendToUser(destinations = "/client", broadcast = false)
        public void ws(Principal principal, String msg) {
    
            // 客户端订阅的地址是 /user/client
            // 服务端@SendToUser发送的代理地址是 /client, 地址将会被转化为 /user/{username}/client
            System.out.println(principal);
            System.out.println(msg);
    
            simpMessagingTemplate.convertAndSendToUser("yawn1", "/client", msg);
        }

     

  4. 客户端订阅代码

    var socket = new SockJS("/socket");
    var stomp = Stomp.over(socket);
    stomp.connect("guest", "guest", function(frame){
        stomp.subscribe("/user/client", function (message) {
            $(".content").html(message.body);
        })
    });
    

     

  5. 客户端发送代码(客户端发送的地址可以是服务端@MessageMappring设置的地址,也可以是配置的代理地址,后者可以直接将消息发送给订阅者)

    
    $(".send").click(function () {
        stomp.send("/server/send", {}, $(".msg").val());
    });

     

转载于:https://my.oschina.net/silenceyawen/blog/1546167

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值