websocket推送进度条百分比给前台

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

直接放代码:

//后台代码 

@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;
    }
  }
}

进度条进度数据 效果如下

原文地址:https://www.cnblogs.com/xuchao0506/p/12638521.html

时间: 2024-11-14 12:59:01

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

微信公众号如何一天能推送多条图文消息

微信公众号推送多条图文消息,可以在关注回复,扫描二维码回复,群发消息里实现,其他场景均不能推送多条图文消息,微信早已禁用了部分场景功能的多图文消息使用.www.weihaobang.com/product?id=70&fm=fang 微号帮功能有关注回复.扫描二维码回复,群发消息,可以向粉丝推送多条图文消息,主要介绍扫描二维码回复多图文消息,二维码带统计关注粉丝来源,粉丝通过这个二维码关注都能统计到,粉丝取消也能监测到. 渠道二维码生成 使用渠道二维码生成功能,创建扫描回复多图文消息,选择修改粉

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

前言 秒杀架构到后期,我们采用了消息队列的形式实现抢购逻辑,那么之前抛出过这样一个问题:消息队列异步处理完每个用户请求后,如何通知给相应用户秒杀成功? 场景映射 首先,我们举一个生活中比较常见的例子:我们去银行办理业务,一般会选择相关业务打印一个排号纸,然后就可以坐在小板凳上玩着手机,等待被小喇叭报号.当小喇叭喊到你所持有的号码,就可以拿着排号纸去柜台办理自己的业务. 这里,假设当我们取排号纸的时候,银行根据时间段内的排队情况,比较人性化的提示用户:排队人数较多,您是否继续等待?否的话我们可以换

我写的websocket推送例子,每隔5秒服务器向客户端浏览器发送消息(node.js和浏览器)

node.js服务端 先要安装ws模块的支持 npm install ws 服务端(server.js) var gws; var WebSocketServer = require('ws').Server, wss = new WebSocketServer({ port: 9000 }); wss.on('connection', function (ws) { gws = ws; console.log('client connected'); ws.on('message', func

android websocket推送

1.通过WebSocketServlet来实现 import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.u

websocket推送

<!DOCTYPE HTML><html><head> <title>My WebSocket</title></head> <body>Welcome<br/><input id="text" type="text" /><button onclick="send()">Send</button> <butt

应用Response.Write实现带有进度条的多文件上传

前几天,写过一篇随笔“使用RESPONSE.WRITE实现在页面的生命周期中前后台的交互”.说是交互,实际上也主要是在ASP.NET的页面周期中 从后台利用RESPONSE.WRITE向前台即时的推送内容. 该篇随笔算是对上一篇文章的实际应用,利用RESPONSE.WRITE的这个特性实现上传文件时实时进度的显示.如对 RESPONSE.WRITE/RESPONSE.FLUSH不甚了解,请先移步这里. 先附上示例代码MultiUploadProgressClassic. 提前声明一点,HTML发

SWIFT推送之本地推送(UILocalNotification)

本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. 1.首先在didFinishLaunchingWithOptions方法内添加代码,IOS8推送消息首先要获得用户的同意,在初次安装App时会提示用户是否允许程序推送消息,此方法是App第一次运行的时候被执行一次,每次从后台激活时不执行该方法. func application(application:

回忆远程推送的原理

回忆一下远程推送的过程 远程推送:又称APNs 长连接: 特点:传输速度快 作用:系统升级(正常都是分批推送),查找我的iPhone 下面介绍一下远程推送的原理: 1.设备的唯一标识:UDID.用来区别我们的设备 2.应用的唯一标识:bundleID.用来区别应用程序 因为这两者牵扯用户的信息,所以苹果一定不会提供给我们,因此苹果搞了一个DeviceToken(包含UDID和bundleID),所以只需要把DeviceToken传给苹果,苹果就能解析,这样就可以确认你手机上的应用 例子:微信的两

socket.io实践(一.实现简单的图表推送)

引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主要为后期BI软件,CRM图标系统使用nodejs socket做铺垫.主要实现的是一个分析表图的推送. socketio.io 代码库以及官网 https://github.com/socketio/socket.io http://socket.io/ 使用redis来实现集群读写 消息 (采用订