第一步:引入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进行消息推送(一对一模式)相关推荐

  1. springboot+sockjs进行消息推送(广播模式)

    第一步:引入pom依赖: <!-- sockjs --><dependency><groupId>org.springframework.boot</grou ...

  2. springboot+sockjs进行消息推送(群发)

    首先是pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  3. in java中文版百度云 thinking_小程序订阅消息推送(含源码)java实现小程序推送,springboot实现微信消息推送...

    前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,<借助云开发实现小程序订阅消息和模板消息的推送功能>是有好多同学用的是Java写后台,所以今天就再来写一篇Java后台实现小程序 ...

  4. 小程序消息推送(含源码)java实现小程序推送,springboot实现微信消息推送

    本文是比较老得技术来实现,用最新技术实现小程序推送,请看 5行java代码实现微信小程序模版消息推送 (含springboot后台和小程序源码) 也可以看最新的视频讲解:https://edu.csd ...

  5. 基于SpringBoot实现微信消息推送

    本微信消息推送实现的功能 1.当天指定城市的天气 2.当天指定城市的最低高气温 3.彩虹屁 技术栈 1.SpringBoot2.7.5 2.JDK1.8 源码链接:weather_push.zip - ...

  6. springboot+websocket+sockjs进行消息推送【基于STOMP协议】

    1.浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打 ...

  7. 若依+websocket+springboot+elementui 实现消息推送

    场景 服务端有定时任务,会监测预警的一些事件,当定时任务监测到预警产生的时候,需要向WEB端推送预警的内容,实现效果如下图所示: 实现思路 我使用的框架后端是若依架构,定时任务加websocket通讯 ...

  8. SpringBoot 整合MQTT 消息推送

    一: pom文件添加依赖 <!-- mqtt --><dependency><groupId>org.springframework.integration< ...

  9. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...

    我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...

最新文章

  1. 平衡二叉树及其应用场景
  2. WINCE 自绘位图按钮
  3. 查询一个表中某个字段最大值的集合
  4. 关于解释List<Integer> list = new ArrayList<Integer>()
  5. PyDev的使用-高效Py编程
  6. 写一个简单的 django_post demo
  7. html点击图片产生事件,jquery – 图像单击HTML5 Canvas中的事件
  8. 程序猿月薪过 7 万,可以落户北京了!
  9. mysql常用命令添加外键主键约束存储过程索引
  10. 计算机研究生复试常见面试题——计算机网络部分
  11. 创意视频混音软件:Remixvideo for Mac
  12. 《共同警戒区》观后感(r10笔记第97天)
  13. 计算机视觉的终极目标
  14. 正则表达式测试工具 java,正则表达式测试工具RegexTester
  15. linux 权限 c,Linux下获取root权限的c程序
  16. 文因互联 CEO 鲍捷:确保搞砸人工智能项目的十种方法
  17. 巨头倾轧却能强劲生长,青云做对了什么?
  18. 智汀智能系统,开启智能家居新时代
  19. 在学RTX之前的操作系统知识
  20. dubbo 获取不到本地地址,返回 127.0.0.1

热门文章

  1. scala学习笔记-Array、ArrayBuffer以及遍历数组(7)
  2. 需求决定设计,设计来源于需求
  3. Redis Cluster高可用(HA)集群环境搭建详细步骤
  4. 在JAVA中如何检查字符串日期的合法性
  5. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-1]
  6. 【百度地图API】自行获取区域经纬度的工具
  7. cocos2d-x 3.0正式版创建project笔记
  8. JAVA中byte为负数处理
  9. 【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
  10. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等...