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

  • 已认证进项税额转出怎么做账务处理
  • 小规模纳税人销售额超过500万
  • 科普一下发票知识
  • 养猪场死猪处理方法
  • 年终奖个人所得税计算器
  • 签三方协议需要什么资料
  • 代账公司需要做报表吗
  • 计划成本下存货盘盈
  • 抵押贷款买房子合适还是商业贷款合适
  • 计提车间折旧费怎么写分录
  • 银行代付工资如何做财务处理合适?
  • 非营利组织注册登记证件图片
  • 出口退税备案完后怎么办
  • 12月份的收入1月份开具发票,报税时免税吗
  • 国税对个体户征收哪些税?
  • 折扣折让红字发票内容
  • 发放年终奖计提需要调减利润吗
  • 农产品增值税优惠政策2021
  • 企业购进货物若发生下列事项,其增值税进项税额
  • 购物发票的税是由谁承担
  • 卖菜公司有税务优惠吗
  • 委托代销商品委托方发出商品的分录
  • 委托代理出口能否办理退税
  • 读会计没有考到证 能出来干什么
  • 私户给公户转账多久到账
  • 主合同变更对保险的影响
  • 怎么扣除购入的物品
  • 出租车车票可以出卖吗
  • php getheader
  • 无形资产摊销会影响利润吗
  • 如何用以前年度损益调整调增成本
  • 损益类账户的期末余额一般在借方还是贷方
  • 定额发票已验旧是什么意思
  • 资产负债表利润表和现金流量表
  • uniapp怎么引入elementui
  • 资产负债表各项目年初余额栏内各项数字
  • 分期收款企业所得税确认时间
  • 购买承兑的收益会计分录
  • 预收账款转收入可以调以前年度吗
  • 固定资产一次性折旧账务处理
  • 本单位职工可以承包本单位业务吗
  • 其它应收款的处理程序
  • 纳税收入包括居民个人在境外取得的收入吗?
  • 残保金滞纳金免征吗
  • 小规模纳税人运输费计入什么科目
  • 电子承兑提示付款提前几天
  • 什么是销项税额转出
  • 企业跨区变更地址迁入地核验码怎么查询
  • 投资性房地产租金
  • 企业如何做增值业务
  • 合并财务报表内部往来如何抵消
  • 施工企业工人工作总结
  • 两笔不同业务能转账吗
  • 企业计提坏账准备遵循的会计信息质量要求是
  • 年初未分配利润在利润表怎么填
  • 在sp_executesql中使用like字句的方法
  • fedora安装双系统
  • xp 控制面板
  • 如何查看ubuntu系统版本
  • gwsloader.exe是什么意思
  • linux tar -zxf
  • pkjobs.exe - pkjobs是什么进程 有什么用
  • win7系统可移动的文件
  • 全面了解自我,接纳和包容自我
  • django实现登录注册功能
  • cocos2d安装教程
  • openvz
  • 批处理 修改文件名
  • java.基础
  • 使用chrome浏览器打开
  • jquery mobile demo
  • js tab页面切换
  • js基础教程
  • 每天一篇文章锻炼口才的文章
  • js中闭包
  • js的navigator
  • 浙江国税咨询电话12306
  • 临时税务登记有效期怎么填
  • 考上如皋地税局好吗
  • 党风监督员监督和反应情况怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设