您的位置:首页 > 编程语言 > Java开发

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

2017-07-19 15:02 781 查看
本文针对 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: