说明:后台springboot项目 前台vue+element-UI

直接放代码:

//别忘了开启springboot的websocket
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
//后台代码
首先在启动类中注入
@Bean
public ServerEndpointExporter serverEndpointExporter() {
   return new ServerEndpointExporter();
}

@Component
@ServerEndpoint("/websocket")
public class WebSocket {

  private Session session;

  private static CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();
  private String msg = "0";

  @OnOpen
  public void onOpen(Session session) {
    this.session = session;
    webSockets.add(this);
    sendAllMessage(msg);
  }

  /**
  * 关闭调用方法
  */
  @OnClose
  public void onClose() {
    webSockets.remove(this);
  }

  @OnMessage
  public void onMessage(String msg) {
  }

  /**
  * 消息广播到前台
  *
  * @param msg
  */
  public void sendAllMessage(String msg) {
    for (WebSocket webSocket : webSockets) {
      try {
        webSocket.session.getBasicRemote().sendText(msg);
        } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

}

//前台vue
<div style="margin-top: 20px;">
    <el-progress :percentage="percentMsg"></el-progress>
</div>

//前台js  mounted是vue用来初始化的  methods里定义的是方法
 mounted() {
    // WebSocket
    if ("WebSocket" in window) {
      this.websocket = new WebSocket("ws://localhost:8080/websocket");
      this.initWebSocket();
    } else {
      alert("当前浏览器 Not support websocket");
    }
  },
  methods: {
    initWebSocket() {
      // 连接错误
      this.websocket.onerror = this.setErrorMessage;
      // 连接成功
      this.websocket.onopen = this.setOnopenMessage;
      // 收到消息的回调
      this.websocket.onmessage = this.setOnmessageMessage;
      // 连接关闭的回调
      this.websocket.onclose = this.setOncloseMessage;
      // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
      window.onbeforeunload = this.onbeforeunload;
    },
    setErrorMessage() {
      // console.log(
      //   "WebSocket连接发生错误   状态码:" + this.websocket.readyState
      // );
    },
    setOnopenMessage() {
      // console.log("WebSocket连接成功    状态码:" + this.websocket.readyState);
    },
    setOnmessageMessage(event) {
      // 服务器推送的消息
      console.log("服务端返回:" + event.data);
      //percentMsg就是绑定的进度值
      this.percentMsg = parseInt(event.data);
      if (this.percentMsg == 100) {
     //如果进度是100 dialog框就隐藏
        this.dialogPortVisible = false;
      }
    },
    setOncloseMessage() {
      // console.log("WebSocket连接关闭    状态码:" + this.websocket.readyState);
    },
    onbeforeunload() {
      this.closeWebSocket();
    },
    closeWebSocket() {
      this.websocket.close();
    },
   //format函数是和进度条组件绑定的 具体可查看element-ui组件官网进度条
   format(percentage){
    return percentage === 100 ? "满" : `${percentage}%`
   }
 }
//后台调用推送数据

@RestController
public class ExportTxt {

  @Autowired
  private WebSocket websocket;

  @RequestMapping(value = "/test", method = RequestMethod.POST, produces = "application/json;charset=utf-8")
  public void test(){
    String msg = "";
    int a = 0;
    for(int i=0;i<5;i++){
      msg = String.valueOf(a);
      websocket.sendAllMessage(msg);
      a=a+20;
    }
  }
}

进度条进度数据 效果如下

websocket推送进度条百分比给前台的更多相关文章

  1. 小谢第37问:关于websocket推送进度,本地保存进度条,然后跳出页面进入后再显示的问题

    1.主要技术点:sessionStorage 会话存储进度 这里在使用之前,顺便说一下cookie.sessionStorage.localStorage 共同点:都是保存在浏览器端,且同源的. 区别 ...

  2. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...

  3. 模拟websocket推送消息服务mock工具二

    模拟websocket推送消息服务mock工具二 在上一篇博文中有提到<使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock>使用electron创建一个模拟后 ...

  4. GoEasy实现websocket 推送消息通知到客户端

    最近在实现一个推送功能,用户扫描二维码签到,后台及时将签到成功信息推送到浏览器端.排除了前端ajax轮询的方式,决定采用websocket及时推送. 于是发现了第三方websocket推送库GoEas ...

  5. Golang websocket推送

    Golang websocket推送 在工作用主要使用的是Java,也做过IM(后端用的netty websocket).最近想通过Golang重写下,于是通过websocket撸了一个聊天室. 项目 ...

  6. sys模块 进度条百分比

    用于提供对Python解释器相关的操作: sys.argv           命令行参数List,第一个元素是程序本身路径 sys.exit(n)        退出程序,正常退出时exit(0) ...

  7. 利用奇偶数来获取websocket推送时间间隔(或者比较前一个数和下一个数的变化)

    利用奇偶数来获取websocket推送时间间隔(或者比较前一个数和下一个数的变化) 在vue中的 data () {     return { countTime: 0,         newDat ...

  8. web全栈应用【爬取(scrapy)数据 -> 通过restful接口存入数据库 -> websocket推送展示到前台】

    作为 https://github.com/fanqingsong/web_full_stack_application 子项目的一功能的核心部分,使用scrapy抓取数据,解析完的数据,使用 pyt ...

  9. 从构建分布式秒杀系统聊聊WebSocket推送通知

    秒杀架构到后期,我们采用了消息队列的形式实现抢购逻辑,那么之前抛出过这样一个问题:消息队列异步处理完每个用户请求后,如何通知给相应用户秒杀成功? 场景映射 首先,我们举一个生活中比较常见的例子:我们去 ...

随机推荐

  1. 搜索引擎-SHODAN

    shodan这个搜索引擎不会爬取网页内容,而是爬取所有的联网设备. 这个搜索引擎还是很强大的,下图就是我用shodan查自己的案例服务器的结果: 如图,可以查到这台服务器安装了wdcp管理面板,黑客完 ...

  2. Python 简明教程 --- 13,Python 集合

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...

  3. Flask-install-python2.6

    命令: # 安装virtualenv $ sudo yum install python-setuptools $ sudo easy_install virtualenv OR sudo pip i ...

  4. 3分钟理解NMS非极大值抑制

    1. NMS被广泛用到目标检测技术中,正如字面意思,抑制那些分数低的目标,使最终框的位置更准: 2. 假如图片上实际有10张人脸,但目标检测过程中,检测到有30个框的位置,并且模型都认为它们是人脸,造 ...

  5. python3.8-运行jupyter 报raise NotImplementedError

    最近安装了python3.8 并安装jupyter,运行时却提示NotImplementedError,很崩溃 经过多次查证 貌似是3.8版本的bug...(这么牛逼的问题,被我遇到了.),不过网络上 ...

  6. 支持十万并发的黑科技-NIO

    今天是猿灯塔“365天原创计划”第3天. 今天讲: 支持十万并发的黑科技-NIO 翻译过来就是:Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC(一种远程调用) 分布式服务框架(SOA),致 ...

  7. css3动画讲解,关于css3的@keyframes和animation

    通过css3我们可以创建动画,它能取代gif图片.Flash.Js动画等,css3的animation动画是应用在html的DOM元素上的,通过样式来实现的. @keyframes 规则 @Keyfr ...

  8. List集合的遍历方式

    遍历List集合的三种方法 List list = new ArrayList(); list.add("aaa"); list.add("bbb"); lis ...

  9. Let's GO(二)

    人生苦短,Let's GO Let's GO(一) Let's GO(二) Let's GO(三) Let's GO(四) 今天我学了什么? 1. Map map:映射,使用散列表(hash)实现 m ...

  10. Python axis的含义

    axis=0表述列 axis=1表述行 如下面例子: In [52]: arr=np.arange(12).reshape((3,4))In [53]:arrOut[53]:array([[ 0, 1 ...