springboot+sockjs进行消息推送(一对一模式)
第一步:引入pom依赖:
<!-- sockjs --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><!-- 进行页面跳转 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
第二步:编写sockjs的springboot配置文件
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;/*** 配置WebSocket*//*** 注册端点,发布或者订阅消息的时候需要连接此端点* setAllowedOrigins 非必须,*表示允许其他域进行连接* withSockJS 表示开始sockejs支持*/@Configuration
//注解开启使用STOMP协议来传输基于代理(message broker)的消息,这时控制器支持使用@MessageMapping,就像使用@RequestMapping一样
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{@Override//注册STOMP协议的节点(endpoint),并映射指定的urlpublic void registerStompEndpoints(StompEndpointRegistry registry) {//注册一个STOMP的endpoint,并指定使用SockJS协议registry.addEndpoint("/endpoint-websocket").setAllowedOrigins("*").withSockJS();}//配置消息代理(Message Broker)/*** 配置消息代理(中介)* enableSimpleBroker 服务端推送给客户端的路径前缀* setApplicationDestinationPrefixes 客户端发送数据给服务器端的一个前缀*/@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {//点对点应配置一个/user消息代理,广播式应配置一个/topic消息代理registry.enableSimpleBroker("/topic","/user");//点对点使用的订阅前缀(客户端订阅路径上会体现出来),不设置的话,默认也是/user/registry.setUserDestinationPrefix("/user");}
}
第三步:后台java代码
package com.baidu.websocket.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import com.baidu.websocket.model.InMessage;
import com.baidu.websocket.model.OutMessage;
import com.baidu.websocket.model.User;@Controller
public class GameInfoController {@RequestMapping("/index")public String index() {return "index";}@Autowiredprivate SimpMessagingTemplate template;//一对一队列推送消息@Scheduled(fixedRate = 5000)public void sendQueueMessage() {System.out.println("后台一对一推送!");User user=new User();user.setId(1);user.setName("qushedn");user.setAge(10);this.template.convertAndSendToUser(user.getId()+"","/queue/getResponse",user);}}
1.SimpMessagingTemplate:SpringBoot提供操作WebSocket的对象
2.@Scheduled(fixedRate = 5000):是每五秒执行一次,记得去主类上用@EnableScheduling开启一下定时任务。
3.template.convertAndSend:直接向前端推送消息。里面用逗号隔开的三个参数分别是:
A:发送给谁
B:发送的url
C:发送的内容
第四步:编写前台代码
<!DOCTYPE html>
<html><head><title>websocket.html</title> <meta name="content-type" content="text/html" charset="UTF-8"></head> <body><div> <p id="id"></p> </div><!-- 独立JS --><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.slim.js"></script><script type="text/javascript" src="js/queue.js" charset="utf-8"></script><script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script><script src="https://cdn.bootcss.com/stomp.js/2.3.3/stomp.min.js"></script></body>
</html>
第五步:编写 queue.js
var stompClient = null; //加载完浏览器后 调用connect(),打开双通道$(function(){ //打开双通道connect()}) //强制关闭浏览器 调用websocket.close(),进行正常关闭window.onunload = function() {disconnect()}function connect(){var Id=1;var socket = new SockJS('/endpoint-websocket'); //连接SockJS的endpoint名称为"endpointOyzc"stompClient = Stomp.over(socket);//使用STMOP子协议的WebSocket客户端stompClient.connect({},function(frame){//连接WebSocket服务端 console.log('Connected:' + frame);stompClient.subscribe("/user/"+Id+"/queue/getResponse",function(response){//stompClient.subscribe('/topic/getResponse',function(response){var code=JSON.parse(response.body); showResponse(code) });});}//关闭双通道function disconnect(){if(stompClient != null) {stompClient.disconnect();}console.log("Disconnected");}function showResponse(message){var response = $("#name");response.append("<p>只有userID为"+message.id+"的人才能收到</p>");}
最后访问浏览器:http://localhost:8080/index,每五秒便可以得到如下图所示:
springboot+sockjs进行消息推送(一对一模式)相关推荐
- springboot+sockjs进行消息推送(广播模式)
第一步:引入pom依赖: <!-- sockjs --><dependency><groupId>org.springframework.boot</grou ...
- springboot+sockjs进行消息推送(群发)
首先是pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...
前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,<借助云开发实现小程序订阅消息和模板消息的推送功能>是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序 ...
- 小程序消息推送(含源码)java实现小程序推送,springboot实现微信消息推送
本文是比较老得技术来实现,用最新技术实现小程序推送,请看 5行java代码实现微信小程序模版消息推送 (含springboot后台和小程序源码) 也可以看最新的视频讲解:https://edu.csd ...
- 基于SpringBoot实现微信消息推送
本微信消息推送实现的功能 1.当天指定城市的天气 2.当天指定城市的最低高气温 3.彩虹屁 技术栈 1.SpringBoot2.7.5 2.JDK1.8 源码链接:weather_push.zip - ...
- springboot+websocket+sockjs进行消息推送【基于STOMP协议】
1.浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打 ...
- 若依+websocket+springboot+elementui 实现消息推送
场景 服务端有定时任务,会监测预警的一些事件,当定时任务监测到预警产生的时候,需要向WEB端推送预警的内容,实现效果如下图所示: 实现思路 我使用的框架后端是若依架构,定时任务加websocket通讯 ...
- SpringBoot 整合MQTT 消息推送
一: pom文件添加依赖 <!-- mqtt --><dependency><groupId>org.springframework.integration< ...
- java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...
我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...
最新文章
- 平衡二叉树及其应用场景
- WINCE 自绘位图按钮
- 查询一个表中某个字段最大值的集合
- 关于解释List<Integer> list = new ArrayList<Integer>()
- PyDev的使用-高效Py编程
- 写一个简单的 django_post demo
- html点击图片产生事件,jquery – 图像单击HTML5 Canvas中的事件
- 程序猿月薪过 7 万,可以落户北京了!
- mysql常用命令添加外键主键约束存储过程索引
- 计算机研究生复试常见面试题——计算机网络部分
- 创意视频混音软件:Remixvideo for Mac
- 《共同警戒区》观后感(r10笔记第97天)
- 计算机视觉的终极目标
- 正则表达式测试工具 java,正则表达式测试工具RegexTester
- linux 权限 c,Linux下获取root权限的c程序
- 文因互联 CEO 鲍捷:确保搞砸人工智能项目的十种方法
- 巨头倾轧却能强劲生长,青云做对了什么?
- 智汀智能系统,开启智能家居新时代
- 在学RTX之前的操作系统知识
- dubbo 获取不到本地地址,返回 127.0.0.1
热门文章
- scala学习笔记-Array、ArrayBuffer以及遍历数组(7)
- 需求决定设计,设计来源于需求
- Redis Cluster高可用(HA)集群环境搭建详细步骤
- 在JAVA中如何检查字符串日期的合法性
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-1]
- 【百度地图API】自行获取区域经纬度的工具
- cocos2d-x 3.0正式版创建project笔记
- JAVA中byte为负数处理
- 【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
- 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等...