欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-21 14:19:00
...

本文针对 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

连接测试

请求状态码:
基于spring websocket实现广播及点对点推送功能
控制台信息:
基于spring websocket实现广播及点对点推送功能

广播功能测试

访问广播请求:
基于spring websocket实现广播及点对点推送功能
接收广播信息1:
基于spring websocket实现广播及点对点推送功能
接收广播信息2:
基于spring websocket实现广播及点对点推送功能

点对点推送功能测试

监听目的地:
基于spring websocket实现广播及点对点推送功能
发送推送请求:
基于spring websocket实现广播及点对点推送功能
接收推送消息:
基于spring websocket实现广播及点对点推送功能

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