精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

全棧實(shí)戰(zhàn)!用 WebSocket 實(shí)現(xiàn)實(shí)時(shí)消息推送 + 動(dòng)態(tài)進(jìn)度條可視化

開發(fā) 前端
借助 WebSocket 實(shí)現(xiàn)的實(shí)時(shí)通信機(jī)制,我們有效地解決了輪詢帶來的性能瓶頸和用戶體驗(yàn)問題。無論是消息推送,待辦提醒,還是任務(wù)進(jìn)度的動(dòng)態(tài)刷新,WebSocket 都提供了更優(yōu)雅與高效的解決方案。

在傳統(tǒng) Web 應(yīng)用中,任務(wù)狀態(tài)查詢或通知推送往往依賴前端定時(shí)輪詢接口獲取數(shù)據(jù)。雖然這種方式實(shí)現(xiàn)簡(jiǎn)單,但在數(shù)據(jù)頻繁變化或用戶量激增的場(chǎng)景下,頻繁的 HTTP 請(qǐng)求會(huì)引起數(shù)據(jù)庫(kù)壓力增大,響應(yīng)延遲甚至系統(tǒng)性能下降。

本文將基于 Spring Boot + WebSocket 的技術(shù)棧,構(gòu)建一個(gè)服務(wù)端主動(dòng)推送消息的實(shí)時(shí)提醒系統(tǒng),并可視化每項(xiàng)任務(wù)的進(jìn)度。前端將通過 WebSocket 進(jìn)行一次性連接,并實(shí)時(shí)響應(yīng)后端推送的最新數(shù)據(jù),從而極大提升用戶體驗(yàn)與系統(tǒng)性能。

系統(tǒng)功能概覽

  • 待辦數(shù)量實(shí)時(shí)推送
  • 通知紅點(diǎn)自動(dòng)刷新
  • 支持 WebSocket 持久連接
  • 動(dòng)態(tài)進(jìn)度條展示任務(wù)完成情況
  • 前后端獨(dú)立交互,解耦式開發(fā)結(jié)構(gòu)

依賴配置(Maven)

添加必要的依賴于 pom.xml 文件中:

<!-- MyBatis Plus & MySQL -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>


<!-- WebSocket -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    <version>2.1.6.RELEASE</version>
</dependency>

數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)

建立兩張表用于模擬待辦任務(wù)及其子任務(wù)進(jìn)度:

CREATE TABLE t_todo (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  user_name VARCHAR(255) COMMENT '用戶名稱',
  name VARCHAR(255) COMMENT '待辦標(biāo)題'
) COMMENT='待辦任務(wù)主表';


CREATE TABLE t_todo_attr (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  todo_id BIGINT COMMENT '主表ID',
  status INT COMMENT '完成狀態(tài) 1為已完成'
) COMMENT='待辦任務(wù)進(jìn)度子表';

一條 t_todo 記錄表示一個(gè)任務(wù),對(duì)應(yīng)若干 t_todo_attr 子任務(wù)進(jìn)度項(xiàng)。

WebSocket 服務(wù)端配置

WebSocket 注冊(cè)配置

// /src/main/java/com/icoderoad/config/WebSocketConfig.java
@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

實(shí)現(xiàn)主任務(wù)通知服務(wù)

// /src/main/java/com/icoderoad/ws/WebSocketTodoServer.java
@ServerEndpoint("/ws/todo/{username}")
@Component
public class WebSocketTodoServer {
    private static final Map<String, Session> sessions = new ConcurrentHashMap<>();


    @OnOpen
    public void open(Session session, @PathParam("username") String username) {
        sessions.put(username, session);
        int count = SpringContextUtil.getBean(TodoService.class)
                .count(new LambdaQueryWrapper<Todo>().eq(Todo::getUserName, username));
        send(session, String.valueOf(count));
    }


    @OnClose
    public void close(@PathParam("username") String username) {
        sessions.remove(username);
    }


    @OnMessage
    public void message(String msg) {}


    @OnError
    public void error(Session session, Throwable throwable) {
        throwable.printStackTrace();
    }


    public void sendInfo(String username, String msg) {
        Session session = sessions.get(username);
        send(session, msg);
    }


    private void send(Session session, String msg) {
        if (session != null) {
            synchronized (session) {
                try {
                    session.getBasicRemote().sendText(msg);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

后端接口實(shí)現(xiàn)

// /src/main/java/com/icoderoad/controller/TodoController.java
@RestController
@RequestMapping("/todo")
public class TodoController {


    @Autowired private TodoService todoService;
    @Autowired private WebSocketTodoServer wsServer;


    @PostMapping("/insert")
    public ResponseUtils insert(@RequestParam String todoName, @RequestParam String userName) {
        Todo todo = new Todo();
        todo.setName(todoName);
        todo.setUserName(userName);
        todoService.save(todo);


        int count = todoService.count(new LambdaQueryWrapper<Todo>().eq(Todo::getUserName, userName));
        wsServer.sendInfo(userName, String.valueOf(count));


        return ResponseUtils.success(todoName);
    }


    @GetMapping("/list")
    public ResponseUtils list(@RequestParam String userName) {
        List<Todo> todos = todoService.list(new LambdaQueryWrapper<Todo>().eq(Todo::getUserName, userName));
        return ResponseUtils.success(todos);
    }
}

前端頁(yè)面展示

<!-- /src/main/resources/static/index.html -->
<div class="message-container" onclick="toggleTodo()">
    <div class="bell-icon"></div>
    <span class="message-count">0</span>
</div>
<div class="todo-section" id="todoSection" style="display:none;"></div>


<script>
    const socket = new WebSocket('ws://localhost:8077/ws/todo/張三');
    socket.onmessage = (event) => {
        document.querySelector('.message-count').textContent = event.data;
    };


    async function toggleTodo() {
        const section = document.getElementById('todoSection');
        section.style.display = section.style.display === 'none' ? 'block' : 'none';
        if (section.style.display === 'block') {
            const res = await fetch('/todo/list?userName=張三');
            const data = await res.json();
            section.innerHTML = data.data.map(t => `<div>${t.name}</div>`).join('');
        }
    }
</script>

子任務(wù)進(jìn)度 WebSocket(進(jìn)度條)

// /src/main/java/com/icoderoad/ws/WebSocketTodoAttrServer.java
@ServerEndpoint("/ws/todo/attr/{todoId}")
@Component
public class WebSocketTodoAttrServer {
    private static final Map<String, Session> attrSessions = new ConcurrentHashMap<>();


    @OnOpen
    public void onOpen(Session session, @PathParam("todoId") String todoId) {
        attrSessions.put(todoId, session);
        String progress = SpringContextUtil.getBean(TodoAttrService.class).progress(Long.valueOf(todoId));
        send(session, progress);
    }


    public void sendInfo(String todoId, String msg) {
        send(attrSessions.get(todoId), msg);
    }


    private void send(Session session, String msg) {
        try {
            if (session != null) session.getBasicRemote().sendText(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

任務(wù)進(jìn)度更新接口

// /src/main/java/com/icoderoad/controller/TodoAttrController.java
@PostMapping("/attr/update")
public ResponseUtils updateAttr(@RequestParam Long id) {
    todoAttrService.updateById(new TodoAttr(id, 1));
    TodoAttr attr = todoAttrService.getById(id);
    webSocketTodoAttrServer.sendInfo(String.valueOf(attr.getTodoId()),
            todoAttrService.progress(attr.getTodoId()));
    return ResponseUtils.success();
}

結(jié)語:高性能實(shí)時(shí)系統(tǒng)構(gòu)建的利器

借助 WebSocket 實(shí)現(xiàn)的實(shí)時(shí)通信機(jī)制,我們有效地解決了輪詢帶來的性能瓶頸和用戶體驗(yàn)問題。無論是消息推送,待辦提醒,還是任務(wù)進(jìn)度的動(dòng)態(tài)刷新,WebSocket 都提供了更優(yōu)雅與高效的解決方案。

未來在構(gòu)建具有實(shí)時(shí)性要求的系統(tǒng)(如 IM 聊天、實(shí)時(shí)告警、系統(tǒng)監(jiān)控等)時(shí),WebSocket 可以作為首選的通信技術(shù)基礎(chǔ),而非傳統(tǒng)的“輪詢 + 回調(diào)”。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2023-12-27 13:45:00

Python進(jìn)度條代碼

2024-09-02 09:31:19

2024-08-06 14:29:37

2009-08-17 14:41:47

C#進(jìn)度條實(shí)現(xiàn)

2009-08-17 17:15:48

C# 進(jìn)度條效果

2021-09-27 08:31:01

數(shù)據(jù)可視化柱狀圖折現(xiàn)圖

2015-07-31 11:19:43

數(shù)字進(jìn)度條源碼

2024-06-13 08:15:00

2023-12-11 17:15:05

應(yīng)用開發(fā)波紋進(jìn)度條ArkUI

2021-09-27 10:43:18

鴻蒙HarmonyOS應(yīng)用

2013-04-12 10:05:49

HTML5WebSocket

2023-11-17 09:35:58

2009-08-17 15:48:47

C# WinForm進(jìn)

2021-02-05 07:28:11

SpringbootNettyWebsocke

2017-10-14 13:54:26

數(shù)據(jù)可視化數(shù)據(jù)信息可視化

2023-11-30 11:38:29

CSS網(wǎng)頁(yè)進(jìn)度條

2009-07-21 14:49:55

XmlHttpRequ文件上傳進(jìn)度條

2024-07-25 08:55:47

進(jìn)度條水缸進(jìn)度動(dòng)畫效果

2011-07-05 15:16:00

QT 進(jìn)度條

2022-05-16 09:34:17

Python可視化圖表
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日韩在线三级| 成人国产精品免费网站| 日韩中文字幕视频| fc2成人免费视频| 天堂√8在线中文| www.爱久久.com| 国产精品吴梦梦| 我要看黄色一级片| 蜜桃tv一区二区三区| 欧美猛男男办公室激情| 免费不卡av在线| 99re在线视频| av在线这里只有精品| 国产精品丝袜久久久久久不卡| 久久久精品人妻一区二区三区四 | 污视频网站免费在线观看| 99久精品国产| 97久草视频| 国产精品第6页| 日韩午夜免费| 九九视频这里只有精品| 亚洲综合欧美综合| 欧美变态网站| 精品久久久久久久久久久久久久久 | 日韩精品免费观看视频| 亚洲高清视频中文字幕| 一区二区三区电影| 精品亚洲综合| 91最新地址在线播放| 亚洲一区二区三区在线视频| 涩涩视频在线观看| 狂野欧美一区| 欧美一性一乱一交一视频| 69av.com| 欧美成人日本| 久久精品视频在线观看| 欧美一区二区三区粗大| 国产精品亚洲人成在99www| 亚洲成人av在线播放| 成年人看片网站| 精品午夜av| 欧美一区二区三区免费大片| 在线不卡一区二区三区| 成人交换视频| 精品视频在线免费看| 免费黄色一级网站| 日韩精选视频| 欧美性受xxxx黑人xyx性爽| 青青青在线播放| 中文字幕资源网在线观看免费 | 国产午夜亚洲精品羞羞网站| 国产伦精品一区二区三区视频黑人 | 最新黄色av网址| 日韩av久操| 日韩视频免费在线| 国产1区2区3区4区| 国一区二区在线观看| 韩日欧美一区二区| 成人午夜视频在线播放| 麻豆91精品| 国产精品99一区| 亚洲一级在线播放| 国产做a爰片久久毛片| 91色视频在线导航| 亚洲国产视频一区二区三区| 国产成人精品影视| 国产乱码精品一区二区三区中文| 亚洲 国产 欧美 日韩| 91麻豆国产香蕉久久精品| 欧美不卡三区| 在线观看国产原创自拍视频| 中文字幕一区二区三区av| 国产911在线观看| 俺来俺也去www色在线观看| 亚洲第一久久影院| 99视频在线免费| 男人天堂久久| 精品国产免费久久| 91久久免费视频| 国产精品99在线观看| 欧美激情2020午夜免费观看| 欧美黑人一区二区| 狠狠色狠狠色综合系列| 国产精品免费在线 | 欧一区二区三区| 日韩av影视综合网| 国产成人精品视频免费| 国产精品mm| 国产99久久精品一区二区永久免费 | 久久综合给合久久狠狠色| 国产中文在线| 一区二区三区在线视频免费观看| 国产精品丝袜久久久久久消防器材| 色婷婷综合久久久中字幕精品久久| 欧美男人的天堂一二区| 精品无码人妻少妇久久久久久| 欧美**字幕| 欧美激情奇米色| 亚洲综合成人av| 成人视屏免费看| 在线观看福利一区| 一根才成人网| 精品久久人人做人人爽| 国产精品无码无卡无需播放器| 黄页网站一区| 国产精品偷伦一区二区| 天堂av在线资源| 亚洲欧美一区二区三区孕妇| 国产成人综合一区| 国产精品三p一区二区| www.日本久久久久com.| www.国产高清| 国产成人av影院| 亚洲一区三区在线观看| 亚洲少妇视频| 精品999在线播放| 黄色录像免费观看| 日本强好片久久久久久aaa| 欧美性受xxxx黑人猛交| 国产女主播福利| 久久爱www久久做| 久久久久久久久久久久久久久久av| 国产福利视频在线| 欧美日韩激情一区| 成人乱码一区二区三区av| 亚洲天堂成人| 国产激情美女久久久久久吹潮| 中文字幕日本在线观看| 欧洲日韩一区二区三区| 成人免费毛片糖心| 麻豆成人在线| 欧美在线激情| 午夜不卡影院| 亚洲男人第一av网站| 日韩污视频在线观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品久久久久四虎| 久久久久免费精品| 免费精品国产| 国产精品pans私拍| 九色在线观看| 在线中文字幕一区二区| 日本少妇高潮喷水xxxxxxx| 香蕉亚洲视频| 欧美综合77777色婷婷| 在线成人av观看| 亚洲女人被黑人巨大进入| 狠狠人妻久久久久久| 2020日本不卡一区二区视频| 丰满爆乳一区二区三区| 欧美色资源站| 欧美一级片免费在线| 欧美孕妇孕交| 欧洲一区二区av| 九九九视频在线观看| 麻豆专区一区二区三区四区五区| 一区二区免费电影| 久久一级大片| 午夜欧美不卡精品aaaaa| 亚洲av电影一区| 色综合久久久久| 成人一级片免费看| 精品在线播放午夜| 成人免费a级片| 婷婷精品在线| 国产精品久久久久久久久久久不卡 | 性色av一区二区三区在线观看| 天堂中文在线官网| 精品动漫一区二区| 性欧美精品男男| 精品一区二区影视| 黄色一级片在线看| 国产精品嫩草影院在线看| 国产精品自产拍在线观看中文| 免费在线观看av| 欧美v亚洲v综合ⅴ国产v| 欧美日韩综合在线观看| 欧美激情一区在线| xxx中文字幕| 亚洲欧美网站| 欧美亚洲视频一区| 开心激情综合| 国产精品久久久久91| 粗大黑人巨茎大战欧美成人| 亚洲国产精品成人va在线观看| 黄色污污网站在线观看| 亚洲三级理论片| 人妻丰满熟妇aⅴ无码| 裸体在线国模精品偷拍| 日本精品久久久久久久久久| 国产欧美日韩在线观看视频| 91在线高清免费观看| 97成人资源| 欧美成在线视频| 国产高清美女一级毛片久久| 欧美成人一区二区三区在线观看 | 午夜在线视频一区二区区别| 在线码字幕一区| 亚洲精品合集| 91亚洲精品丁香在线观看| 日韩精品影院| 午夜欧美大片免费观看| 久草免费在线观看| 亚洲精品之草原avav久久| a网站在线观看| 欧美丝袜丝交足nylons图片| 日韩久久久久久久久| 亚洲视频免费观看| 久久久久久国产精品无码| 成人一区二区在线观看| 乌克兰美女av| 国产亚洲精品久久久久婷婷瑜伽| 色哟哟免费网站| 精品午夜久久| 日本不卡二区高清三区| 激情小说亚洲色图| www国产亚洲精品| 成人在线分类| 国产欧美欧洲在线观看| 丝袜美腿一区| 欧美一区二粉嫩精品国产一线天| 久久香蕉一区| 久久99视频免费| 超碰超碰在线| 日韩中文字幕网址| 一区二区三区视频在线观看视频| 精品视频在线导航| 欧美视频xxx| 亚洲成人精品久久久| www国产在线| 91精品久久久久久久91蜜桃| 亚洲一级特黄毛片| 在线成人午夜影院| 国产精品福利电影| 欧美久久久久久久久久| 一二三区在线播放| 欧美日韩1234| 国产一区二区三区成人| 在线电影院国产精品| 国产免费黄色网址| 4438成人网| 国产成人三级在线播放| 日韩一区二区精品葵司在线 | 亚洲欧美综合久久久久久v动漫| 国产精品91免费在线| 国精产品一区二区三区有限公司| 国产mv免费观看入口亚洲| 欧美成人黑人| 国产精品国产亚洲伊人久久 | 欧美成人性福生活免费看| 精品黑人一区二区三区国语馆| 欧美一级久久久久久久大片| 国产草草影院ccyycom| 日韩免费高清视频| 色综合视频在线| 国产丝袜精品第一页| 国产黄色在线播放| 日韩网站免费观看高清| 麻豆网站在线看| 欧美精品在线免费观看| 国产啊啊啊视频在线观看| 97香蕉久久超级碰碰高清版| 高清av不卡| 国产在线观看91精品一区| a一区二区三区亚洲| dy888夜精品国产专区| 秋霞综合在线视频| 日韩欧美在线电影| 一本精品一区二区三区| 国产欧美日韩网站| 久久久久网站| 三日本三级少妇三级99| av色综合久久天堂av综合| 无码人妻aⅴ一区二区三区69岛| 中文字幕av免费专区久久| www.99re7| 色综合一个色综合亚洲| 91亚洲精品国偷拍自产在线观看| 欧美成人一区二区三区| 国产日韩精品在线看| 粗暴蹂躏中文一区二区三区| 韩日毛片在线观看| 国产精品羞羞答答| 高清日韩中文字幕| 日韩wuma| 亚洲国产综合在线看不卡| 国产成人精品视频ⅴa片软件竹菊| 国产一区二区毛片| av在线网站观看| 一区二区欧美国产| 最新在线中文字幕| 亚洲大胆美女视频| 求av网址在线观看| 456国产精品| 免费一区二区三区在线视频| 欧美精彩一区二区三区| 欧美激情aⅴ一区二区三区| 成人小视频在线看| 国产成人啪免费观看软件| 国产一级久久久久毛片精品| 亚洲成人精品一区二区| 97视频免费在线| 亚洲一区二区精品| 久草在线中文最新视频| 成人欧美在线视频| 国产最新精品| 尤物av无码色av无码| 国产尤物一区二区| jizz中文字幕| 狠狠久久五月精品中文字幕| av手机免费看| 日韩视频在线观看免费| 成人日韩精品| 久久综合伊人77777麻豆| 女同性一区二区三区人了人一 | 国产999精品久久久久久绿帽| 老司机福利在线观看| 狠狠色噜噜狠狠狠狠97| 亚洲国产福利视频| 久久婷婷国产麻豆91天堂| av在线播放一区| 欧美日韩精品免费观看视一区二区| 激情婷婷亚洲| 日批视频免费看 | 日本高清不卡码| 欧美精品一区二区三区在线| av在线影院| 亚洲精品免费av| 欧美电影《睫毛膏》| 人妻无码视频一区二区三区| 久久综合色综合88| av资源免费观看| 亚洲精品久久久久国产| heyzo高清在线| 高清不卡一区二区三区| 国产综合精品| 欧类av怡春院| 五月天久久比比资源色| 亚洲日本在线播放| 91精品国产91久久久久久久久| 国产精品极品国产中出| 高清无码视频直接看| 国产白丝精品91爽爽久久| 欧美三根一起进三p| 日韩免费视频一区二区| 日本无删减在线| 国产私拍一区| 国产欧美日本| 精品无码在线观看| 欧美三级视频在线观看| 欧洲美女少妇精品| 91久久精品国产91性色| 欧美成人首页| 免费成人蒂法网站| 日韩欧美一区二区三区久久| 二区在线观看| 成人免费网站在线| 狠狠爱www人成狠狠爱综合网 | 久久久久久久久久久久久久久久久久久久| 国产精品久久久久久久久电影网| 成人一区二区三区在线观看| 日本最新中文字幕| 亚洲天堂av高清| 欧美特黄色片| 轻点好疼好大好爽视频| 99re热这里只有精品免费视频| 日韩人妻精品中文字幕| 中文字幕成人精品久久不卡| 96视频在线观看欧美| 国产va亚洲va在线va| 2022国产精品视频| 一道本在线视频| 国产最新精品视频| 国产乱码精品一区二区三区四区| 国产精品区在线| 亚洲一二三专区| 成年人在线视频免费观看| 成人午夜两性视频| 国产日韩欧美一区在线| 日本综合在线观看| 亚洲精品一线二线三线| 色豆豆成人网| 嫩草影院中文字幕| 国产清纯白嫩初高生在线观看91| 99热这里只有精品在线| 91高清视频免费观看| 久久大综合网| 爱爱的免费视频| 91精品国产一区二区人妖| 中文字幕乱码在线播放| 免费观看国产视频在线| 91在线观看污| av在线亚洲天堂| 国产成人精品午夜| 亚洲性感美女99在线| 国产一区二区三区视频播放| 亚洲国产精品久久久久久| 国产第一亚洲| 黄色动漫在线免费看| 一区二区三区在线不卡|