位置: 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重点知识总结)

  • 一个地址可以注册几个公司两个个体工商户吗

    一个地址可以注册几个公司两个个体工商户吗

  • 爱奇艺vip账号怎么登录(爱奇艺vip账号怎么查)

    爱奇艺vip账号怎么登录(爱奇艺vip账号怎么查)

  • oppo账号实名认证怎么换绑(oppo账号实名认证怎么强制解除)

    oppo账号实名认证怎么换绑(oppo账号实名认证怎么强制解除)

  • iphonex扬声器声音小怎么办(iphonex扬声器杂音滋滋)

    iphonex扬声器声音小怎么办(iphonex扬声器杂音滋滋)

  • 如何用手机QQ扫描文件转换成文字(如何用手机qq扫描电脑二维码)

    如何用手机QQ扫描文件转换成文字(如何用手机qq扫描电脑二维码)

  • qq视频美颜对方知道吗(qq视频美颜对方能看到吗)

    qq视频美颜对方知道吗(qq视频美颜对方能看到吗)

  • 小方摄像头烧内存卡吗(摄像头烧了是啥意思)

    小方摄像头烧内存卡吗(摄像头烧了是啥意思)

  • 华为手环怎么没充电口(华为手环怎么没有时间)

    华为手环怎么没充电口(华为手环怎么没有时间)

  • 蓝牙耳机与有线耳机音质区别(蓝牙耳机与有线耳机哪个对耳朵好)

    蓝牙耳机与有线耳机音质区别(蓝牙耳机与有线耳机哪个对耳朵好)

  • ios储存空间与app测出不同(ios 储存空间)

    ios储存空间与app测出不同(ios 储存空间)

  • 联通iptv卡顿解决方法(联通iptv 卡)

    联通iptv卡顿解决方法(联通iptv 卡)

  • 手机关机后别人打电话开机后会有提示吗(手机关机后别人发微信开机还能看到吗)

    手机关机后别人打电话开机后会有提示吗(手机关机后别人发微信开机还能看到吗)

  • 小米摄像头一直闪蓝光(小米摄像头一直亮黄灯是怎么回事)

    小米摄像头一直闪蓝光(小米摄像头一直亮黄灯是怎么回事)

  • 微信被冻结了原因(微信被冻结了原手机登录可以被退掉吗还能登上吗)

    微信被冻结了原因(微信被冻结了原手机登录可以被退掉吗还能登上吗)

  • 建站需要什么(建站条件)

    建站需要什么(建站条件)

  • 美团错误删除订单恢复(美团订单删除不了该订单不可删除)

    美团错误删除订单恢复(美团订单删除不了该订单不可删除)

  • 华为荣耀20s没有耳机吗(华为荣耀20s没有语音唤醒功能)

    华为荣耀20s没有耳机吗(华为荣耀20s没有语音唤醒功能)

  • iphone5有没有录屏(苹果5有没有录屏?)

    iphone5有没有录屏(苹果5有没有录屏?)

  • 淘宝如何修改邮政编码(淘宝怎么修改邮箱地址)

    淘宝如何修改邮政编码(淘宝怎么修改邮箱地址)

  • 苹果搬板是什么意思(苹果搬板教程)

    苹果搬板是什么意思(苹果搬板教程)

  • 小米8wifi已连接不可上网(小米8wifi连接速度72m)

    小米8wifi已连接不可上网(小米8wifi连接速度72m)

  • 将十进制数35转换成二进制数是(十进制数35转换成无符号二进制整数是)

    将十进制数35转换成二进制数是(十进制数35转换成无符号二进制整数是)

  • OS X 系统多屏显示隐藏第二个屏幕上的菜单栏(苹果多屏协同win10)

    OS X 系统多屏显示隐藏第二个屏幕上的菜单栏(苹果多屏协同win10)

  • 电脑学习网zibll子比主题全新高级社区论坛圈子功能子比V6新功能傻瓜教程(电脑自学网)

    电脑学习网zibll子比主题全新高级社区论坛圈子功能子比V6新功能傻瓜教程(电脑自学网)

  • 交强险必须交车船使用税吗?交多少钱?
  • 汽车租赁企业
  • 更换税控盘后原发票如何导入旧盘开票税局
  • 分公司如何缴纳企业所得税
  • 定货合同有法律效力吗?
  • 建筑业简易征收差额征税的计算案例
  • 确认一个会计项目应符合的基本标准有
  • 外购烟叶税进项税额的扣除率
  • 详解劳务报酬个人所得税应该怎么计算?
  • 三证合一后章要换吗
  • 个人去税务局开劳务票 税点是多少
  • 企业会计准则基本准则的主要内容
  • 控股合并吸收合并新设合并图示
  • 全年物业费需要待摊吗
  • 民间非营利组织会计科目
  • 苹果电脑快捷键删除
  • win10系统如何注册dll文件
  • win7系统的系统配置里设置开机启动项
  • 贷款利率计算公式表格
  • 小规模纳税人买车可以抵税吗
  • 电脑运行慢怎么清理c盘
  • 异地预缴税款后当地还交吗
  • 手机cpu性能天梯图排行榜
  • 经销商计提折扣怎么做账
  • 金融企业贷款损失准备金税务管理
  • PHP:Memcached::getMulti()的用法_Memcached类
  • 包装物押金收入计入收入总额吗
  • 未开票收入怎么做账
  • 怎么租一个月
  • 最小的的照片
  • 购进来的样品怎么账务处理
  • 单位春节发的过生日红包
  • 新罕布什尔州的邮政编码
  • 应收票据其他应收款都需要提取坏账准备么
  • 一个残疾证一年单位免多少税2023
  • 母公司与子公司交易属于关联交易吗
  • 与上级往来的会计科目的题目
  • 长期借款主要包括哪些
  • 房地产公司计提税金
  • 边际贡献总额什么意思
  • 印花税怎么计提记账
  • 在建工程转入
  • 以前年度损益调整会计分录
  • 分公司计提递延所得税吗
  • 新收入准则确认收入的条件
  • 金税盘注册码怎么查
  • 计提增值税如何计算
  • 公司半年后交五险合法吗
  • 以前多计提的税款怎么办
  • 代收收入
  • 转售水电费收入确认
  • 收到第三方补助怎么做账
  • 企业会计制度对固定资产无入账价值怎么入账
  • 技术支持费用属于什么费用
  • 发票报销是什么流程
  • 企业出售投资性房地产应按照售价与账面价值
  • 固定资产为什么提折旧,有何实际意义
  • 这么查看
  • sql中的coalesce
  • 一个查看明日方舟的网站
  • 按关键字13,24,37,90,53,34
  • mybatis报错invalid bound statement
  • xp系统可以双屏吗
  • windowsxp自带播放器
  • mac字体发虚解决办法
  • archlinux 配置网络
  • 哪个是win8.1更新win10的补丁
  • 关于windows的开始菜单,叙述错误的是
  • ES6 javascript中class静态方法、属性与实例属性用法示例
  • unity3d官方
  • webpack 构建流程
  • 浅析科学发展观的核心立场
  • 用Python设计一个游戏
  • javascript函数自调用
  • python字典添加多个键值对
  • Android android.support.v4.widget.SlidingPaneLayout 侧滑示例
  • 代扣代缴申报表哪里查询
  • 残保金申报表填写
  • 电子发票美元如何查询
  • 深圳代理记账公司赚钱吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设