一文详解Laravel8/LaravelS实现弹幕功能
本篇文章给大家带来了关于Laravel8/LaravelS的相关知识,其中主要介绍了Laravel8基于LaravelS实现弹幕功能的方法步骤,感兴趣的朋友,下面一起来看一下,希望对大家有帮助。
Laravel8基于LaravelS实现弹幕弹幕功能
简介
Laravel8基于LaravelS实现弹幕弹幕功能。前面学了基于Swoole实现视频弹幕功能,这篇文章就来实现一个基于Laravel8的视频弹幕功能。如果对webpack不熟悉,那么在安装vue-baberrage组件时可能会报错却不知如何解决。下面开始一步一步实现。
前面学了基于Swoole实现视频弹幕功能,这篇文章就来实现一个基于Laravel8的视频弹幕功能。如果对webpack不熟悉,那么在安装vue-baberrage
组件时可能会报错却不知如何解决。下面开始一步一步实现。
第一步:安装Laravel8
composer create-project laravel/laravel labarrage
第二步:Laravel8中使用vue
Laravel8如何使用vue,请参考 Laravel8中使用vue。
注意:安装vue时请使用 php artisan ui vue --auth
第三步:安装及安装vue-baberrage
安装vue及bootstrap
npm install
安装弹幕组件
npm install vue-baberrage --save
运行
npm run dev
如果遇到BREAKING CHANGE: webpack < 5 used to include
错误,请参考 Laravel8使用webpack报错的解决方法。
后续只要文件改动就需要重新编译,后续将不再复述。
第四步:安装LaravelS实现Websocket服务器
第五步:项目中引入vue-baberrage组件
文件:resources/js/app.js 新增如下内容
import { vueBaberrage } from 'vue-baberrage' Vue.use(vueBaberrage) Vue.component('danmu-component', require('./components/DanmuComponent.vue').default);
第五步:编写文弹幕组件
后续实现代码根据 学院君 文章改动
位置:resources/js/components/DanmuComponent.vue
<template> <div id="danmu"> <div> <vue-baberrage :isShow = "barrageIsShow" :barrageList = "barrageList" :loop = "barrageLoop" :maxWordCount = "60" > </vue-baberrage> </div> <div> <div> <select v-model="position"> <option value="top">从上</option> <option value="abc">从右</option> </select> <input type="text" style="float:left" v-model="msg"/> <button type="button" style="float:left" @click="addToList">发送</button> </div> </div> </div> </template> <script> import { MESSAGE_TYPE } from 'vue-baberrage' export default { name: 'danmu', data () { return { msg: 'hello 自如初!', position: 'top', barrageIsShow: true, currentId: 0, barrageLoop: false, barrageList: [] } }, methods: { removeList () { this.barrageList = [] }, addToList () { if (this.position === 'top') { this.barrageList.push({ id: ++this.currentId, msg: this.msg + this.currentId, barrageStyle: 'top', time: 8, type: MESSAGE_TYPE.FROM_TOP, position: 'top' }) } else { this.barrageList.push({ id: ++this.currentId, msg: this.msg, time: 15, type: MESSAGE_TYPE.NORMAL }) } } } } </script> <style scoped> #danmu { text-align: center; color: #2c3e50; } .stage { height: 300px; width: 100%; background: #025d63; margin: 0; position: relative; overflow: hidden; } h1, h2 { font-weight: normal; } ul { list-style-type: none; padding: 0; } li { display: inline-block; margin: 0 10px; } a { color: #42b983; } .baberrage-stage { z-index: 5; } .baberrage-stage .baberrage-item.normal{ color:#FFF; } .top{ border:1px solid #66aabb; } .danmu-control{ position: absolute; margin: 0 auto; width: 100%; bottom: 300px; top: 70%; height: 69px; box-sizing: border-box; text-align: center; display: flex; justify-content: center; div { width: 300px; background: rgba(0, 0, 0, 0.6); padding: 15px; border-radius: 5px; border: 2px solid #8ad9ff; } input,button,select{ height:35px; padding:0; float:left; background:#027fbb; border:1px solid #CCC; color:#FFF; border-radius:0; width:18%; box-sizing: border-box; } select{ height:33px; margin-top:1px; border: 0px; outline: 1px solid rgb(204,204,204); } input{ width:64%; height:35px; background:rgba(0,0,0,.7); border:1px solid #8ad9ff; padding-left:5px; color:#FFF; } } </style>
第六步:视图中使用组件
位置:resources/views/danmu.blade.php
@extends('layouts.app') @section('content') <danmu-component></danmu-component> @endsection
第七步:注册路由
Route::get('/danmu', function() { return view('danmu'); });
执行 npm run dev
第八步:编写websocket服务器
文件:App\Handlers\WebSocketHandler.php
<?php namespace App\Handlers; use Hhxsv5\LaravelS\Swoole\WebSocketHandlerInterface; use Illuminate\Support\Facades\Log; use Swoole\Http\Request; use Swoole\WebSocket\Frame; use Swoole\WebSocket\Server; class WebSocketHandler implements WebSocketHandlerInterface { public function __construct() { } // 连接建立时触发 public function onOpen(Server $server, Request $request) { Log::info('WebSocket 连接建立:' . $request->fd); } // 收到消息时触发 public function onMessage(Server $server, Frame $frame) { // $frame->fd 是客户端 id,$frame->data 是客户端发送的数据 Log::info("从 {$frame->fd} 接收到的数据: {$frame->data}"); foreach($server->connections as $fd){ if (!$server->isEstablished($fd)) { // 如果连接不可用则忽略 continue; } $server->push($fd , $frame->data); // 服务端通过 push 方法向所有连接的客户端发送数据 } } // 连接关闭时触发 public function onClose(Server $server, $fd, $reactorId) { Log::info('WebSocket 连接关闭:' . $fd); } }
第九步:laravels.php注册
文件:config/laravels.php
'websocket' => [ 'enable' => true, 'handler' => \App\Handlers\WebSocketHandler::class, ],
第十步:启动
php bin/laravels start
这样就完成啦
本文网址:https://www.zztuku.com/index.php/detail-13794.html
站长图库 - 一文详解Laravel8/LaravelS实现弹幕功能
申明:本文转载于《自如初博客》,如有侵犯,请 联系我们 删除。
您还没有登录,请 登录 后发表评论!
提示:请勿发布广告垃圾评论,否则封号处理!!