弹幕发送功能‘简单’实现

embedded/2024/11/26 8:29:47/

导入依赖

        <!--   websocket弹幕依赖   --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

后端代码

package com.by.danmaku;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;/*** @author lenovo* @version 0.1* @className WebSocketConfig* @date 2024/11/20 19:21* @since jdk11*/@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// 注册 WebSocket 处理器registry.addHandler(new DanmakuWebSocketHandler(), "/danmaku").setAllowedOrigins("*"); // 允许所有来源,生产环境中应限制为特定来源}
}
package com.by.danmaku;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.util.concurrent.CopyOnWriteArraySet;/*** @author lenovo* @version 0.1* @className DanmakuWebSocketHandler* @date 2024/11/20 19:35* @since jdk11*/
@Slf4j
@Component
public class DanmakuWebSocketHandler extends TextWebSocketHandler {private static final CopyOnWriteArraySet<WebSocketSession> sessions = new CopyOnWriteArraySet<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {log.debug("欢迎进入直播间");sessions.add(session);}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {// 处理接收到的消息String payload = message.getPayload();log.debug("收到消息:{}",payload);for (WebSocketSession s : sessions){s.sendMessage(new TextMessage(payload));}}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {log.debug("有人离开直播间");sessions.remove(session);}}

前端代码

<template><div class="container"><vue-danmaku class="danmaku" v-model:danmus="danmus" :speeds="50" :channels="2" useSlot><template v-slot:dm="{ danmu }">{{ danmu }}</template></vue-danmaku></div><div><el-input class="textarea" v-model="textarea" :rows="2" type="textarea" placeholder="请输入弹幕" /><el-button type="primary" @click="send">发送</el-button></div></template><script setup lang="ts">import { ref, onMounted } from 'vue';
import vueDanmaku from 'vue3-danmaku';
import { wmsStore } from '../store/pinia';const store = wmsStore();
const textarea = ref('');
const danmus = ref<string[]>([]);const socket = new WebSocket('ws://localhost:8080/danmaku');const send = () => {socket.send(textarea.value);
};onMounted(() => {socket.onopen = function (event) {console.log('连接已打开!');};socket.onmessage = function (event) {const message = event.data;danmus.value.push(message);console.log(danmus.value);};socket.onclose = function (event) {console.log('断开!');};
});
</script><style>.container {justify-content: center;display: flex;align-items: center;
}.container .danmaku {height: 300px;width: 600px;background-image: url('/public/ims.png');
}.textarea{width:400px;margin-top: 20px;margin-left: 100px;margin-right: 20px;display: inline-block;  
}
</style>


http://www.ppmy.cn/embedded/140579.html

相关文章

信创改造 - TongRDS 安装方式之控制台安装【Window】

安装前准备 安装 jdk1.8 即可&#xff0c;并配上 环境变量 安装 1&#xff09;解压缩 2&#xff09;启动 进入安装路径的console\bin目录&#xff0c;在cmd命令行窗口运行console.bat 输入序号 1 如果想查看运行状态&#xff0c;可以重新执行 console.bat&#xff0c;然后输…

【基础算法】链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并 K 个升序链表5.K 个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNo…

深度学习(1)

一、torch的安装 基于直接设备情况&#xff0c;选择合适的torch版本&#xff0c;有显卡的建议安装GPU版本&#xff0c;可以通过nvidia-smi命令来查看显卡驱动的版本&#xff0c;在官网中根据cuda版本&#xff0c;选择合适的版本号&#xff0c;下面是安装示例代码 GPU&#xff…

python从入门到精通:pyspark实战分析

前言 spark&#xff1a;Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成本上千的服务器集群&#xff0c;计算TB、PB乃至E…

SOL 链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

从零开始打造个人博客:我的网页设计之旅

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在共享经济…

天润融通携手挚达科技:AI技术重塑客户服务体验

业务爆发式增长&#xff0c;但座席服务却跟不上&#xff0c;怎么办&#xff1f; 智能充电领导者的挚达科技就面临过 这样的问题&#xff0c;让我们来看看如何解决。 2010年以来&#xff0c;国内新能源汽车市场进入高速发展期&#xff0c;作为新能源汽车的重要配件&#xff0c…