基于spring websocket实现广播及点对点推送功能

本文针对 Web 开发中实现服务器往客户端推送消息的关键技术 websocket 进行重点说明,并且基于spring websocket 实现服务器对客户端的广播及点对点推送功能,供大家参考讨论。

websocket 说明

这里主要参考了:http://blog.csdn.net/pacosonswjtu/article/details/51914567
写得很好,让人能够比较容易的理解 websocket 的原理。如果读完本博客,希望更深入的理解 websocket 建议阅读上述内容。下面主要总结了在实现 websocket 时,需要特别注意的几个重要内容:

服务端配置

在 spring 框架下,实现服务端的配置有两种方法:一种是参照参考链接中的方法,新建 WebSocketConfig 类;另一种方式是在 spring 配置文件中引入 websocket 命名空间,通过配置 xml 配置文件完成。

客户端 websocket 连接及监听

JavaScript 示例代码如下:

function connectAny() {
    var socket = new SockJS("/hello");
    stompClient = Stomp.over(socket);
    stompClient.connect({}, function(frame) {
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.subscribe('/user/'+id+'/message', function(greeting){
            alert(JSON.parse(greeting.body).content);
            showGreeting(JSON.parse(greeting.body).content);
        });
        stompClient.subscribe('/topic/feed', function(greeting){
            alert(JSON.parse(greeting.body).content);
            showGreeting(JSON.parse(greeting.body).content);
        });
    });
}

websocket 连接成功的 http 请求状态码是101,有的情况下会是404(比如 tomcat7的部分低版本)。404 说明websocket 并没有连接成功,但是有时候推送功能依然有效,这是因为引入了 stomp,程序会自动使用替代方案实现 websocket 功能。
示例中 stompClient.subscribe() 中路径,即是被监听的路径。

服务端推送

在服务端任意位置推送消息,需要使用到 SimpMessageSendingOperations 类,使用 convertAndSend(D destination, Object payload) 方法将实现广播推送,使用 convertAndSendToUser(String user, String destination, Object payload) 方法将实现点对点推送。
注意:点对点推送方式将会自动添加上前缀,默认为“/user”,也可以在服务端配置的时候配置为其他前缀,而且也并不一定是用户名,可以使用任何能够标明目的地唯一性的其他字符串,比如 session id。

Demo 测试

下载链接:http://download.csdn.net/detail/chenjhit/9903733
开发环境:IntelliJ IDEA 2016.3.4
运行环境:jre1.8.0_131
服务器:Tomcat 8.5

连接测试

请求状态码:
这里写图片描述
控制台信息:
这里写图片描述

广播功能测试

访问广播请求:
这里写图片描述
接收广播信息1:
这里写图片描述
接收广播信息2:
这里写图片描述

点对点推送功能测试

监听目的地:
这里写图片描述
发送推送请求:
这里写图片描述
接收推送消息:
这里写图片描述

==========================================
疑问?帮助?批评?欢迎评论 | QQ:593159978

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值