webSocket 发送消息给客户端

  1. 在配置websocket代理时使用simpleBroker(简单代理),就不需要使用消息服务器,简单向前端发送消息:
 @Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
    registry.enableSimpleBroker("/client");
}
  1. @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;
    }
  1. 如果服务端要将消息发送给特定的某一个用户,可以使用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);
    }
  1. 客户端订阅代码
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);
    })
});
  1. 客户端发送代码(客户端发送的地址可以是服务端@MessageMappring设置的地址,也可以是配置的代理地址,后者可以直接将消息发送给订阅者)
$(".send").click(function () {
    stomp.send("/server/send", {}, $(".msg").val());
});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏lgp20151222

@Controller和@RestController的区别

我们一般都会在Controller上加上@Controller注解,但是有时候也见有加上@RestController的,现在就说说他们的区别:

842
来自专栏用户画像

Ajax GET请求后台数据

1、前台ftl文件,通过URL请求后台数据,返回数据(Json格式)封装在data中

683
来自专栏racaljk

C++并发高级接口:std::async和std::future

std::async创建一个后台线程执行传递的任务,这个任务只要是callable object均可,然后返回一个std::future。future储存一个多...

1266
来自专栏网络

Nginx服务器的简明架构

Nginx模块介绍 Nginx内部由核心模块和其他功能模块组成。这种简单的结构分层,便于进行功能的扩展,也代码更加清晰易于维护。我们通常将其分为五大模块:核心模...

1905
来自专栏性能与架构

通过分布式缓存实现缓存可伸缩

缓存是改善网站性能的最重要手段,一方面缓存使用内存存储数据,可以更快速地响应请求;另一方面大量数据访问请求通过缓存返回,减少数据库压力,进一步改善性能 目前网站...

3254
来自专栏c#开发者

Oracle数据库几种关闭方式

Oracle数据库几种关闭方式   1、shutdown normal   正常方式关闭数据库。   2、shutdown immedia...

2685
来自专栏Java Edge

Redis实践(十六)-内存管理1 内存优化介绍2 Redis内存消耗3 客户端缓冲区

602
来自专栏蓝天

多写引发的思考

如果是3个Master,采用2PC保证一致性,单个Master故障,会导致不可写。如果正提交的是一个大数据,会造成较大影响。实际上,这个时候可以允许提交,在故障...

581
来自专栏行者常至

Servlet如何处理HTTP协议

792
来自专栏linjinhe的专栏

TCP Listen backlog

1739

扫码关注云+社区