位置: IT常识 - 正文

SpringBoot整合WebSocket实现后端向前端发送消息(springboot整合websocket怎么接受图片消息)

编辑:rootadmin
SpringBoot整合WebSocket实现后端向前端发送消息

目录

一、什么是 websocket 接口

二、适用场景

三、示例代码

3.1、添加pom.xml依赖

3.2、创建WebSokcet配置类

3.3、创建测试发送消息接口

3.4、测试webSocket(http://www.jsons.cn/websocket/)


一、什么是 websocket 接口

推荐整理分享SpringBoot整合WebSocket实现后端向前端发送消息(springboot整合websocket怎么接受图片消息),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:springboot整合websocket netty,springboot整合websocket netty,springboot整合websocket推送,springboot整合websocket原理,springboot整合websocket一篇,springboot整合websocket一篇,springboot整合websocket一篇,springboot整合websocket怎么接受图片消息,内容如对您有帮助,希望把文章链接给更多的朋友!

使用 websocket 建立长连接,服务端和客户端可以互相通信,服务端只要有数据更新,就可以主动推给客户端。

SpringBoot整合WebSocket实现后端向前端发送消息(springboot整合websocket怎么接受图片消息)

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

二、适用场景

在业务开发过程中碰到一些异步处理(微信支付、支付宝支付的支付通知),跨应用的消息传递。

当业务执行完毕后,需要将成功的信息投递给前端。一般情况下都是前端调用后端的http/https接口获取数据,后端想要主动推送消息给前端就需要使用到WebSocket进行前后端的通信。

三、示例代码3.1、添加pom.xml依赖<!-- websocket--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>3.2、创建WebSokcet配置类@Configurationpublic class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); }}3.3、创建WebSokcet工具类@ServerEndpoint(value = "/websocket")@Componentpublic class WebSocketServer { private final static Logger log = LoggerFactory.getLogger(WebSocketServer.class); //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static int onlineCount = 0; //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。 private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>(); //与某个客户端的连接会话,需要通过它来给客户端发送数据 private Session session; /** * 连接建立成功调用的方法 */ @OnOpen public void onOpen(Session session) { this.session = session; //加入set中 webSocketSet.add(this); //在线数加1 addOnlineCount(); log.info("有新连接加入!当前在线人数为" + getOnlineCount()); try { MsgResponseVo userMsgResponseVo = new MsgResponseVo(); userMsgResponseVo.setMsg("SUCCESS"); WebSocketServer.sendInfo(JSON.toJSONString(userMsgResponseVo)); } catch (IOException e) { log.error("websocket IO异常"); } } /** * 连接关闭调用的方法 */ @OnClose public void onClose() { //从set中删除 webSocketSet.remove(this); //在线数减1 subOnlineCount(); log.info("有一连接关闭!当前在线人数为" + getOnlineCount()); } /** * 收到客户端消息后调用的方法 * * @param message 客户端发送过来的消息 */ @OnMessage public void onMessage(String message, Session session) { log.info("来自客户端的消息:" + message); //群发消息 for (WebSocketServer item : webSocketSet) { try { item.sendMessage(message); } catch (IOException e) { e.printStackTrace(); } } } /** * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { log.error("发生错误"); error.printStackTrace(); } public void sendMessage(String message) throws IOException { this.session.getBasicRemote().sendText(message); } /** * 群发自定义消息 */ public static void sendInfo(String message) throws IOException { log.info(message); for (WebSocketServer item : webSocketSet) { try { item.sendMessage(message); } catch (IOException e) { continue; } } } public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { WebSocketServer.onlineCount++; } public static synchronized void subOnlineCount() { WebSocketServer.onlineCount--; }}3.3、创建测试发送消息接口 @GetMapping("/testWebSocket") public ApiRestResponse testWebSocket() throws IOException {        //消息体 MsgResponseVo technicianMsgResponseVo = new MsgResponseVo(); technicianMsgResponseVo.setRole("Technician"); technicianMsgResponseVo.setRoleId(1); technicianMsgResponseVo.setMsg("您的订单已取消"); technicianMsgResponseVo.setMsgStatus("CANCEL_ORDER"); technicianMsgResponseVo.setOrderNo("test");        //发送消息 WebSocketServer.sendInfo(JSON.toJSONString(technicianMsgResponseVo)); return ApiRestResponse.success(); }}3.4、测试webSocket(http://www.jsons.cn/websocket/)

在网站中输入ws://ip:端口/webSocket工具类的前缀(ws://127.0.0.1:8080/websocket)

3.5、前端使用WebSocket监听后端WebSocket地址 ,接收到消息后做下一步业务处理。

本文链接地址:https://www.jiuchutong.com/zhishi/300279.html 转载请保留说明!

上一篇:ajax请求携带自定义请求头header(跨域和同域)($ajax请求)

下一篇:【JavaWeb】复习重点内容(javaweb重点知识总结)

  • 抖音怎么不发布保存视频(抖音怎么不发布保存照片)

    抖音怎么不发布保存视频(抖音怎么不发布保存照片)

  • 打印盒设置错误(打印机打印盒设置错误)

    打印盒设置错误(打印机打印盒设置错误)

  • 微信被别人举报会封号吗(微信被别人举报会出现什么情况)

    微信被别人举报会封号吗(微信被别人举报会出现什么情况)

  • it系统病毒泛滥的主要原因有哪些(it系统病毒泛滥的原因)

    it系统病毒泛滥的主要原因有哪些(it系统病毒泛滥的原因)

  • 华为p30pro怎么设置永不休眠(华为p30pro怎么设置双卡双待)

    华为p30pro怎么设置永不休眠(华为p30pro怎么设置双卡双待)

  • 企业店铺比c店流量大吗(企业店铺会比c店流量多吗)

    企业店铺比c店流量大吗(企业店铺会比c店流量多吗)

  • mate10可以只换外屏吗(华为mate10可以单独换外屏吗)

    mate10可以只换外屏吗(华为mate10可以单独换外屏吗)

  • qq视频能录屏吗(qq视频怎么录屏不让对方知道)

    qq视频能录屏吗(qq视频怎么录屏不让对方知道)

  • 快手推广保证金能退吗(快手推广保证金和店铺保证金都要交吗)

    快手推广保证金能退吗(快手推广保证金和店铺保证金都要交吗)

  • qq群课堂退出老师知道吗(qq课堂退出去会被发现吗)

    qq群课堂退出老师知道吗(qq课堂退出去会被发现吗)

  • 打印机换墨盒后还是显示没墨(打印机换墨盒后灯一直闪)

    打印机换墨盒后还是显示没墨(打印机换墨盒后灯一直闪)

  • 苹果8能双卡双待吗(苹果8双卡双待最新方法视频)

    苹果8能双卡双待吗(苹果8双卡双待最新方法视频)

  • 路由器桥接会影响网速吗(路由器桥接影响主路由网速吗)

    路由器桥接会影响网速吗(路由器桥接影响主路由网速吗)

  • 魅族开发者模式有啥用(魅族开发者模式怎么调最流畅)

    魅族开发者模式有啥用(魅族开发者模式怎么调最流畅)

  • 苹果11怎么隐藏刘海(苹果11怎么隐藏软件不被发现)

    苹果11怎么隐藏刘海(苹果11怎么隐藏软件不被发现)

  • 苹果x盒子里有什么(苹果x的盒子)

    苹果x盒子里有什么(苹果x的盒子)

  • s10无线充电瓦数(s10无线充电器)

    s10无线充电瓦数(s10无线充电器)

  • 买苹果8需要贴膜吗(苹果8需要贴膜和手机壳吗)

    买苹果8需要贴膜吗(苹果8需要贴膜和手机壳吗)

  • 华为p30pro手机带膜吗(华为p30pro手机带无线充电功能吗)

    华为p30pro手机带膜吗(华为p30pro手机带无线充电功能吗)

  • 全民k歌怎么关闭评分(全民k歌怎么关闭原唱)

    全民k歌怎么关闭评分(全民k歌怎么关闭原唱)

  • 不是快充手机可以用快充充电器吗(不是快充手机可以用5v2a的充电器吗)

    不是快充手机可以用快充充电器吗(不是快充手机可以用5v2a的充电器吗)

  • 在哪免费获得win1021H1激活秘钥?2021.4最新激活码推荐(如何免费获得microsoft)

    在哪免费获得win1021H1激活秘钥?2021.4最新激活码推荐(如何免费获得microsoft)

  • PHPCMS漏洞之authkey生成算法问题导致authkey泄露(php网站漏洞)

    PHPCMS漏洞之authkey生成算法问题导致authkey泄露(php网站漏洞)

  • 以前年度损益调整在借方是什么意思
  • 集团内部借款利息收入增值税
  • 罚款可以直接在公安局缴纳吗
  • 核定征收季度核定销售额
  • 增值税零申报附加税费情况表没发保存
  • 国有资产转让房产
  • 商品涉及商业折扣的,如何确认企业所得税的销售收入?
  • 现金账怎么记账图例
  • 物业公司预收款怎么做账
  • 短期借款的利息会计分录怎么写
  • 一个订单只能申请一次退款吗
  • 注册资本金印花税税率是多少
  • 没交社保能扣工伤保险吗
  • 普通发票离线限额为0
  • 增值税发票查验平台官网网络异常
  • 个体户哪种税率最低
  • 增值税在免税范围内,附加税怎么做
  • 收取会员费收入会计分录
  • 用货物抵账该怎么交税
  • 个人证券交易结算资金
  • 只有发票才能税前扣除吗
  • 金税盘抄税报税清卡流程图
  • 无法查明原因现金盘盈计入什么科目
  • 财务费用增加记借方还是贷方
  • 如何编制处置固定资产
  • 招待费如何列支
  • php该怎么学
  • 退休返聘人员如何辞职
  • php必背知识点
  • 建筑业的账务处理办法
  • 应收票据影响现金流吗
  • 西西弗书店主管级
  • 建筑劳务 行业
  • 手撕代码是啥意思
  • ci框架视频教程
  • js经典案例代码大全
  • python2 tkinter
  • js继承方式及其优缺点
  • 事业单位结余资金管理办法
  • 营改增后增加了什么征税项目
  • 销售房产收取预算费用
  • 长期股权投资种类
  • SQLite教程(十三):C语言编程实例代码(1)
  • mongo聚合查询效率问题
  • 短期投资理财是
  • 小企业会计准则没有以前年度损益调整科目
  • 报销人和经办人的含义
  • 当月发生的费用
  • sql2005附加数据库出错
  • 已认证被作废发什么短信
  • 建行e信通贴现高不高
  • 公司向个人借款怎么做账
  • 纳税人销售免税产品开具专票
  • 无形资产计入待摊费用
  • 企业外购的固定资产应该怎样进行会计核算
  • 企业投资人类型怎么选
  • delete from 表名 where
  • mysql免安装版本
  • xp系统中制作动画的软件
  • win10的ghost
  • linux targz
  • win8换win10系统步骤
  • win7共享文件权限设置
  • linux如何快速统计文件个数
  • win8的系统怎么装win7
  • win7开机每次都要输入用户名
  • 表单提交servlet
  • 实现每个星期的计划英语
  • shell 单引号中引用变量
  • MATLAB图像处理实例详解
  • Nodejs+angularjs结合multiparty实现多图片上传的示例代码
  • angular const
  • android/data/wifipwd
  • 央企收入归谁
  • 增值税归国家还是地方
  • 四川地方税务局网址是什么
  • 营销服务协议书范本
  • 点击正式申报前怎么操作
  • 福州台江区怎么去
  • 重庆公交司机收入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设