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

  • 增值税普通发票怎么开
  • 销售收入不含税怎么计算增值税额
  • 代扣个税怎么做凭证
  • 异地预缴怎么做账
  • 金蝶专业版怎么增加一级科目
  • 预收账款借方余额可以计入应收账款的哪方
  • 发票税号错了怎么重开
  • 小规模纳税人企业所得税起征点
  • 车辆使用费怎么开票
  • 实收资本收到后用途
  • 销售原材料收到商业承兑汇票会计分录
  • 停工损失会计科目
  • 劳动合同的主要条款
  • 会计差旅费属于什么会计科目
  • 企业承租经营的承租人取得的所得
  • 专票已经抵扣购买方如何处理
  • 普票丢失的最新处理2019
  • 一般纳税人增值税申报表
  • 总分类账的账簿启用表怎么填
  • win10夜间模式怎么打开不了
  • 期末余额和期初余额
  • 银行收到退款怎么回复
  • php面包屑导航
  • uniapp微信小程序支付流程
  • 台式机显示器推荐
  • 为什么系统弹出登录此网络
  • 职工教育经费一定要提吗
  • 无法连接到你的相机,请重启手机
  • php做
  • 跨年租赁费如何处理
  • java date类型
  • php实现多条件查询
  • 会计中持有至到期投资是什么意思
  • 如何汇算清缴,会计新手求指教
  • 管家婆实物仓库怎么用
  • 其他应收账款属于
  • 商业企业促销费包括哪些
  • smart模板教程
  • 图像风格迁移网站
  • vue中利用ref实现更灵活的子向父传值
  • 坏账损失的核算属于会计估计
  • 进口消费税如何计税
  • 公司注册实收资本能为0嘛
  • 培训费开票属于哪个征收明目
  • 购汽车能抵扣进项吗
  • 当月收入可以下月开票吗
  • PostgreSQL 创建表分区
  • 必要报酬率和期望报酬率谁大更好
  • 军工科研事业单位会计制度
  • 贷方是收入还是借方是收入
  • 预收账款和其他应付款
  • 企业小汽车折旧年限
  • 企业应收票据到期怎么办
  • 固定资产可资本化的后续支出
  • 社保金额不对到不了账
  • 贴现利息高好还是低好
  • 提取银行存款利息分录
  • 废旧物资收购发票政策2018
  • 承兑汇票可以买卖吗?
  • 政府机关有纳税人吗
  • 总账的建立
  • mysql的日志
  • mysql 5.6.26 winx64安装配置图文教程(一)
  • sql server的存储方式
  • xp系统找不到搜索功能
  • ubuntu下的代码编辑器
  • centos7创建swap分区
  • fedora os
  • win10系统自带
  • win8.1的ie浏览器
  • nod32kui.exe - nod32kui是什么进程 作用是什么
  • win10系统onenote不能用
  • python下三角
  • perl中的$_
  • unity3d Human skin real time rendering plus 真实模拟人皮实时渲染 plus篇
  • java栈怎么写
  • 技术总结2000字
  • javascript 代码
  • 税务局与地税局一样吗?
  • 提问:请问海淀区各税务所管辖范围都是哪里?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设