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

SpringBoot 3 實戰:打造讓屏幕飛起來的實時彈幕系統

開發 架構
前端主要用 HTML + CSS + JS + SockJS + STOMP 來連接后端 WebSocket 并渲染彈幕。? HTML、CSS 與 JS 代碼邏輯基本與原示例一致,可直接復用。

在如今的視頻與直播領域,實時彈幕已經不僅是一個“酷炫的裝飾”,而是觀眾互動體驗的核心組成部分。無論是B站的番劇播放,還是各大直播平臺的賽事解說,彈幕早已成為用戶情緒的直接出口:有人激情吐槽,有人在線補充知識點,還有人花式整活帶動氣氛。 如果視頻是舞臺,那么彈幕就是現場觀眾的合唱,它讓屏幕不再孤獨。

本文將帶你使用 Spring Boot 3 + WebSocket,從零搭建一個高性能、可擴展的實時彈幕系統,前后端全流程覆蓋,并包含 消息存儲、內容過濾、歷史回放 等完整功能,讓你的視頻項目立刻具備“會說話的屏幕”。

彈幕系統概述

彈幕的定義

所謂彈幕,就是用戶在觀看視頻時發送的即時評論,這些評論會在視頻畫面上以滾動的形式(從右向左)浮動顯示。它的特點在于:

  • 即時性:觀眾的評論會幾乎同步出現在所有人的屏幕上。
  • 互動性:觀眾能即時看到他人反應,形成群體觀看氛圍。
  • 時間點關聯:彈幕通常綁定在視頻的特定播放時刻。
  • 視覺沖擊:大量彈幕同時出現時,屏幕會像被“刷屏”一樣,帶來強烈的視覺體驗。

 技術挑戰

一個成熟的彈幕系統,不僅要,還要。主要挑戰包括:

  • 高并發下的低延遲通信
  • 大量消息的傳輸與分發
  • 敏感詞過濾與格式規范
  • 彈幕的歷史存儲與回放

系統架構設計

我們實現的實時彈幕系統由以下核心模塊組成:

模塊

作用

前端播放器

播放視頻并渲染彈幕

WebSocket 服務端

負責實時消息收發

彈幕存儲層

保存歷史記錄

內容過濾組件

過濾敏感與違規內容

 協議選擇

我們需要一種低延遲、雙向通信的協議來驅動彈幕實時性:

  • WebSocket:全雙工通信,延遲極低,適合高實時性應用(本文選用)
  • SSE:僅支持服務器單向推送,適合數據廣播場景
  • 長輪詢:兼容性好但延遲高,僅作為兜底方案

后端實現(Spring Boot 3 + WebSocket)

后端目錄結構

/src
 └── main
     ├── java
     │    └── com
     │         └── icoderoad
     │              └── danmaku
     │                   ├── config
     │                   │    └── WebSocketConfig.java
     │                   ├── controller
     │                   │    └── DanmakuController.java
     │                   ├── dto
     │                   │    └── DanmakuDTO.java
     │                   ├── entity
     │                   │    └── Danmaku.java
     │                   ├── mapper
     │                   │    └── DanmakuMapper.java
     │                   └── service
     │                        └── DanmakuService.java
     └── resources
          └── application.yml

Maven 依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
        <version>3.5.5</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

WebSocket 配置

package com.icoderoad.danmaku.config;


import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.*;


@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic"); // 客戶端訂閱路徑
        config.setApplicationDestinationPrefixes("/app"); // 客戶端發送路徑
    }


    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws-danmaku")
                .setAllowedOriginPatterns("*")
                .withSockJS(); // 兼容性支持
    }
}

實體與DTO

package com.icoderoad.danmaku.entity;


import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;


@Data
@TableName("danmaku")
public class Danmaku {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String content;
    private String color;
    private Integer fontSize;
    private Double time;
    private String videoId;
    private String userId;
    private String username;
    private LocalDateTime createdAt;
}
package com.icoderoad.danmaku.dto;


import lombok.Data;


@Data
public class DanmakuDTO {
    private String content;
    private String color = "#ffffff";
    private Integer fontSize = 24;
    private Double time;
    private String videoId;
    private String userId;
    private String username;
}
Mapper
package com.icoderoad.danmaku.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.icoderoad.danmaku.entity.Danmaku;
import org.apache.ibatis.annotations.*;


import java.util.List;


@Mapper
public interface DanmakuMapper extends BaseMapper<Danmaku> {
    @Select("SELECT * FROM danmaku WHERE video_id = #{videoId} ORDER BY time ASC")
    List<Danmaku> findByVideoIdOrderByTimeAsc(String videoId);


    @Select("SELECT * FROM danmaku WHERE video_id = #{videoId} AND time BETWEEN #{start} AND #{end} ORDER BY time ASC")
    List<Danmaku> findByVideoIdAndTimeBetween(String videoId, Double start, Double end);
}

服務層

package com.icoderoad.danmaku.service;


import com.icoderoad.danmaku.dto.DanmakuDTO;
import com.icoderoad.danmaku.entity.Danmaku;
import com.icoderoad.danmaku.mapper.DanmakuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;


import java.time.LocalDateTime;
import java.util.List;


@Service
public class DanmakuService {
    @Autowired
    private DanmakuMapper mapper;
    @Autowired
    private SimpMessagingTemplate template;


    public Danmaku saveDanmaku(DanmakuDTO dto) {
        Danmaku d = new Danmaku();
        d.setContent(filter(dto.getContent()));
        d.setColor(dto.getColor());
        d.setFontSize(dto.getFontSize());
        d.setTime(dto.getTime());
        d.setVideoId(dto.getVideoId());
        d.setUserId(dto.getUserId());
        d.setUsername(dto.getUsername());
        d.setCreatedAt(LocalDateTime.now());


        mapper.insert(d);
        template.convertAndSend("/topic/video/" + d.getVideoId(), d);
        return d;
    }


    public List<Danmaku> listByVideo(String videoId) {
        return mapper.findByVideoIdOrderByTimeAsc(videoId);
    }


    public List<Danmaku> listByVideoAndTime(String videoId, Double start, Double end) {
        return mapper.findByVideoIdAndTimeBetween(videoId, start, end);
    }


    private String filter(String content) {
        String[] badWords = {"敏感詞1", "敏感詞2"};
        String result = content;
        for (String w : badWords) result = result.replaceAll(w, "***");
        return result;
    }
}

控制器

package com.icoderoad.danmaku.controller;


import com.icoderoad.danmaku.dto.DanmakuDTO;
import com.icoderoad.danmaku.entity.Danmaku;
import com.icoderoad.danmaku.service.DanmakuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.web.bind.annotation.*;


import java.util.List;


@RestController
@RequestMapping("/api/danmaku")
public class DanmakuController {
    @Autowired
    private DanmakuService service;


    @MessageMapping("/danmaku/send")
    public Danmaku send(DanmakuDTO dto) {
        return service.saveDanmaku(dto);
    }


    @GetMapping("/video/{videoId}")
    public ResponseEntity<List<Danmaku>> list(@PathVariable String videoId) {
        return ResponseEntity.ok(service.listByVideo(videoId));
    }


    @GetMapping("/video/{videoId}/timerange")
    public ResponseEntity<List<Danmaku>> listByTime(
            @PathVariable String videoId,
            @RequestParam Double start,
            @RequestParam Double end) {
        return ResponseEntity.ok(service.listByVideoAndTime(videoId, start, end));
    }
}

前端實現

前端主要用 HTML + CSS + JS + SockJS + STOMP 來連接后端 WebSocket 并渲染彈幕。 HTML、CSS 與 JS 代碼邏輯基本與原示例一致,可直接復用。

結論

通過本文的實踐,我們構建了一個 高性能、可擴展、支持實時互動 的彈幕系統。 它不僅適用于視頻平臺,也能擴展到 在線課堂、賽事直播、虛擬演唱會 等場景。 未來我們可以進一步引入 AI 彈幕審核消息分布式存儲延遲優化算法 等,讓系統在性能體驗上更進一步。

屏幕不只是顯示畫面,它還可以承載情緒與對話。 讓我們把屏幕變成一個會回應觀眾的“現場”——這就是實時彈幕的魅力。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2019-03-25 08:05:35

Elasticsear優化集群

2025-06-04 01:35:00

RocketMQ異步消息

2020-09-29 07:54:05

Express 飛起

2011-04-13 10:51:58

MATLAB

2025-03-28 03:20:00

MySQL數據庫搜索

2019-11-05 10:35:57

SpringBoot調優Java

2022-10-09 18:14:31

訂單系統分庫分表

2021-07-13 07:52:03

SQL面試COUNT(*)

2025-01-17 09:23:31

2025-06-26 02:15:00

2025-04-15 00:00:00

2024-11-27 09:46:34

2013-01-07 09:34:43

CodeLoveBAT

2011-02-25 08:39:11

QFabric數據中心Juniper

2025-09-02 01:35:00

JavaAIMIP

2025-07-30 01:22:00

2016-01-19 17:03:59

數據中心網絡華為

2024-06-12 12:28:23

2011-09-27 13:25:05

Web

2023-03-01 23:59:23

Java開發
點贊
收藏

51CTO技術棧公眾號

色婷婷综合久久久久| 色婷婷综合久色| 国产精品二区三区四区| 精品无码av在线| 亚洲三级性片| 欧洲av在线精品| 在线亚洲美日韩| 黄色av网址在线| 久久一区精品| 另类视频在线观看| 美女又爽又黄视频毛茸茸| 国产精品videossex撒尿| 国产精品成人午夜| 国产精品亚洲一区| 一本久道久久综合无码中文| 好吊一区二区三区| 亚洲色图综合久久| 色婷婷狠狠18禁久久| 666av成人影院在线观看| 亚洲天堂2014| 日本在线视频不卡| 亚洲成人一级片| 免费在线观看日韩欧美| 午夜精品一区二区三区av| 人妻互换一区二区激情偷拍| 中文字幕一区二区三区中文字幕| 欧美亚洲国产bt| 国产精品自拍片| 黄页视频在线播放| 久久久国产一区二区三区四区小说| 91系列在线观看| 波多野结衣一区二区在线| 尤物网精品视频| 久热精品视频在线免费观看| av电影网站在线观看| 国产精品18hdxxxⅹ在线| 欧美久久久久久久久| 日本黄色三级大片| 97人人爽人人澡人人精品| 一色桃子久久精品亚洲| 欧美一区二区三区四区夜夜大片 | 成人在线观看一区二区| 精品久久毛片| 在线免费av一区| 国产欧美高清在线| 欧美男男激情videos| 亚洲一区影音先锋| 男人草女人视频| 成人在线播放免费观看| 中文字幕亚洲电影| 亚洲精品美女久久7777777| 国产有码在线| 国产欧美一区视频| 日韩欧美精品一区二区| 国模吧精品人体gogo| 久久蜜桃av一区二区天堂| 精品国产乱码一区二区三区四区 | 亚洲欧美日韩中文在线| 久久国产精品无码一级毛片| 看全色黄大色大片免费久久久| 成人激情视频免费在线| 无码一区二区精品| 伊人久久大香线蕉av超碰| 欧美丰满一区二区免费视频| 五月天激情播播| 男人天堂久久| 欧美精品日韩一本| 男人操女人下面视频| 日韩精品久久久久久久软件91| 日韩一级完整毛片| 无码人妻一区二区三区免费n鬼沢| 91成人小视频| 日韩精品一区二区三区中文精品| 99久久久无码国产精品性波多 | 欧美日韩国产高清一区二区三区| 在线观看国产一级片| 人人玩人人添人人澡欧美| 欧美日韩国产片| 午夜免费福利网站| ccyy激情综合| 亚洲精品日韩久久久| 天堂在线中文视频| 香蕉久久网站| 欧美黑人性生活视频| 毛片视频网站在线观看| 日韩av成人高清| 亚洲自拍小视频| 特级丰满少妇一级aaaa爱毛片| 972aa.com艺术欧美| 欧美日韩精品免费看| 自拍视频在线| 一区二区免费看| 97在线免费公开视频| 国产精品亚洲成在人线| 日韩三级免费观看| 女人又爽又黄免费女仆| 天天做天天爱天天爽综合网| 午夜精品久久久久久久99热| 午夜久久久久久久久久影院| 国产精品一区在线| 亚洲大尺度视频在线观看| 久久久精品2019中文字幕神马| 青青操在线视频观看| 欧美日韩成人| 日本高清不卡在线| 国产精品嫩草影院精东| 99精品热视频| 久久av喷吹av高潮av| 中文字幕在线视频网站| 91精品国产入口| 少妇真人直播免费视频| 欧美日韩国产欧| 日韩av电影免费观看高清| 99久久亚洲精品日本无码| 91麻豆国产福利在线观看| 最近中文字幕免费mv| 91av亚洲| 精品久久久久av影院 | 一二区在线观看| 99久久精品免费| 亚洲国产一二三精品无码| 日韩高清不卡| 亚洲精品福利免费在线观看| 香蕉久久久久久久| 久久一日本道色综合久久| 国产综合色一区二区三区| av香蕉成人| 欧美日韩激情一区二区| 玖玖爱在线观看| 亚洲国产电影| 成人91视频| 麻豆系列在线观看| 欧美吞精做爰啪啪高潮| 巨胸大乳www视频免费观看| 国产综合视频| 97伦理在线四区| 免费大片黄在线| 欧美日韩国产综合视频在线观看| 蜜桃无码一区二区三区| 99精品99| 精品蜜桃一区二区三区| 成人影音在线| 精品裸体舞一区二区三区| 99视频只有精品| 国产久卡久卡久卡久卡视频精品| 亚洲欧美久久久久一区二区三区| 网友自拍亚洲| 国产一区二区av| www.com亚洲| 久久久蜜桃精品| 国产又大又硬又粗| 国产成人高清| 国产精品免费视频久久久| 国内av一区二区三区| 91国在线观看| 一级特黄曰皮片视频| 日韩不卡一二三区| 日韩三级电影网站| 91另类视频| 精品国产视频在线| 国产视频手机在线观看| 亚洲精品久久久蜜桃| 国产老头和老头xxxx×| 欧美极品一区二区三区| 成人av免费看| www成人免费观看| 国产丝袜精品视频| 欧美一级黄视频| 18欧美乱大交hd1984| 99精品视频免费版的特色功能| 欧美日韩1080p| 国产精品永久入口久久久| 欧美aa在线| 亚洲新中文字幕| 国产在成人精品线拍偷自揄拍| 亚洲人精品午夜| 制服丝袜在线第一页| 性欧美xxxx大乳国产app| 欧美日韩免费高清| 欧美网站免费| 久久久久国产精品免费网站| 视频三区在线观看| 欧美午夜精品一区| 青娱乐国产在线| 91麻豆免费观看| 最新av免费在线观看| 一区精品久久| 日韩久久精品一区二区三区| 亚洲欧美一级| 91国内免费在线视频| av在线天堂| 欧美va天堂va视频va在线| 台湾佬中文在线| 亚洲女同一区二区| 日本一区二区三区网站| 韩国三级在线一区| 全黄性性激高免费视频| 精品福利久久久| 亚洲伊人一本大道中文字幕| 欧美日韩国产观看视频| 久久久99免费视频| 日韩精品系列| 日韩欧美黄色影院| 自拍偷拍精品视频| 亚洲国产精品久久一线不卡| 久久久精品成人| 不卡的av网站| 国产福利精品一区二区三区| 午夜在线视频观看日韩17c| 一区二区三区免费看| 欧美精品国产白浆久久久久| 91免费精品国偷自产在线| 在线观看特色大片免费视频| 久久天天躁狠狠躁夜夜躁 | 94色蜜桃网一区二区三区| 亚洲18在线看污www麻豆| 国产美女一区| 日本大片免费看| 欧美成人直播| 欧美一级二级三级| 国产一区二区在线视频你懂的| 国产一区私人高清影院| 国产精品av一区二区三区 | a成人v在线| 91国产美女视频| 日本小视频在线免费观看| 中文字幕亚洲精品| 国产女主播在线直播| 日韩电影第一页| 理论片中文字幕| 欧美一级黄色片| 亚洲综合免费视频| 91国产精品成人| 日韩不卡视频在线| 精品久久久久久亚洲精品| 久久午夜鲁丝片午夜精品| 亚洲天堂av老司机| 亚洲精品久久久久久国| 国产女人水真多18毛片18精品视频| 好吊日免费视频| av电影天堂一区二区在线观看| 日本少妇一级片| 国产成人亚洲精品青草天美| 在线视频日韩欧美| 久久国产成人午夜av影院| 牛夜精品久久久久久久| 免费在线观看视频一区| 欧美大尺度做爰床戏| 日韩高清不卡一区| 免费看黄色一级大片| 视频一区二区三区中文字幕| 国产欧美高清在线| 日本视频免费一区| 成人在线免费播放视频| 天堂精品中文字幕在线| 日韩无套无码精品| 日本vs亚洲vs韩国一区三区二区| 亚洲精品高清无码视频| 秋霞电影一区二区| 国产视频1区2区3区| 美女一区二区三区| www.久久久久久久久久久| 激情综合网激情| 久久久久亚洲av无码网站| 大陆成人av片| 欧美做受喷浆在线观看| 久久久久久久久久看片| 免费在线观看a视频| 国产精品三级视频| 久草视频手机在线| 亚洲一区二区三区免费视频| 日韩av无码中文字幕| 日韩欧美a级成人黄色| 亚洲精品无码久久久久| 欧美精品99久久久**| 亚洲AV无码国产精品午夜字幕 | 国产高清自拍视频在线观看| 日韩在线资源网| 日韩另类在线| 茄子视频成人在线| 亚洲久草在线| 国产精品伊人日日| 欧洲视频一区| www.亚洲成人网| 男女精品网站| 邪恶网站在线观看| 国产成人av影院| 亚洲成人网在线播放| 综合久久国产九一剧情麻豆| 国产对白videos麻豆高潮| 91黄色在线观看| 亚洲av无码国产综合专区| 亚洲美女精品成人在线视频| 男人的天堂在线视频免费观看 | 日韩在线观看免费高清完整版| 牛牛电影国产一区二区| 欧美最猛性xxxxx免费| 四虎影视精品永久在线观看| 国产乱码精品一区二区三区中文 | 中文字幕伦av一区二区邻居| 一区二区三区av| 国产精品嫩草99av在线| 午夜国产福利在线观看| 91欧美一区二区| 久久久久久久久久久久久女过产乱| 欧美特黄级在线| 国产强被迫伦姧在线观看无码| 日韩精品免费电影| dy888亚洲精品一区二区三区| 欧美一区二区三区……| 秋霞影院一区| 亚洲国产一区二区三区在线播| 亚洲国产一区二区三区高清| 尤物国产在线观看| 91亚洲精品久久久蜜桃网站| caoporn91| 欧美在线你懂得| 天堂在线中文字幕| 欧美日韩不卡合集视频| 久久69成人| 欧美日韩中文国产一区发布| 亚洲成人在线| 制服下的诱惑暮生| 国产女主播视频一区二区| 国产午夜免费福利| 精品毛片乱码1区2区3区| 国产视频一区二区| 国产又爽又黄的激情精品视频 | 26uuu精品一区二区三区四区在线| 全网免费在线播放视频入口| 欧美优质美女网站| 免费黄色片在线观看| 国语对白做受69| 99re6热只有精品免费观看| 特级黄色录像片| 久久er精品视频| 九九热免费在线| 欧美中文一区二区三区| 国产区在线视频| 国产成人精品电影久久久| 亚洲亚洲免费| 蜜臀av午夜一区二区三区 | 国产精品18在线| 欧美伊人久久久久久久久影院| 黄视频在线观看免费| 日本精品视频在线观看| 婷婷五月色综合香五月| 欧美精品99久久| 久久影院视频免费| 中文字幕亚洲乱码熟女1区2区| 国产婷婷色综合av蜜臀av| 一个人看的www视频在线免费观看| 精品人伦一区二区三区| 亚洲一区日韩| 色欲AV无码精品一区二区久久 | 午夜精品www| 加勒比色综合久久久久久久久| 国产一区二区四区| aaa欧美色吧激情视频| 中文字幕亚洲精品在线| 精品亚洲一区二区| 色天使综合视频| 夜夜爽99久久国产综合精品女不卡| 久久66热偷产精品| 九九热视频精品| 日韩精品免费在线播放| 三上悠亚激情av一区二区三区| 日韩三级电影| 韩国女主播成人在线| 久久久久亚洲天堂| 日韩精品中文在线观看| 日韩欧美精品一区二区综合视频| 亚洲啪啪av| 高清不卡一区二区在线| 亚洲日本韩国在线| 中文字幕无线精品亚洲乱码一区 | 成年人国产精品| av大片在线免费观看| 中文字幕精品www乱入免费视频| 国产一区一区| 欧美,日韩,国产在线| 91麻豆免费在线观看| 一区二区视频网站| 精品国产乱码久久久久久蜜臀| 日本在线影院| 亚洲伊人婷婷| 国产成人精品一区二区三区四区| 欧美a∨亚洲欧美亚洲| 在线观看精品国产视频| 国产精品欧美一区二区三区不卡| 在线观看成人免费| 北条麻妃国产九九精品视频| 国产在线欧美在线| 亚洲欧美日韩区| 日韩在线观看中文字幕| 干日本少妇首页| 亚洲欧美日韩在线| 五月婷婷丁香六月| 91精品一区二区| 一本色道久久综合亚洲精品高清 |