时间:2023-07-23 06:18:01 | 来源:网站运营
时间:2023-07-23 06:18:01 来源:网站运营
三天打造一款全栈简易视频直播网站(一):从前端谈项目架构、接口设计、前后端设计、node.js中间层封装、项目测试、性能优化以及运维部署。├── build 网站上线目录├── coverage 覆盖率测试结果├── src 网站开发目录├── tests 项目测试目录├── .babelrc babel配置文件├── .gitignore git有关├── gulpfile.js gulp配置文件├── jest.config.js jest配置文件├── readme.md├── package.json├── webpack.config.js webpack开发配置文件└── webpack.production.config.js webpack上线配置文件
MIMETYPE:multipart/x-mixed-replace;boundary=frame
传输的视频流的URL,还有一份是存储识别结果的资源数据库,我需要做的,便是将视频流展示,将识别结果以表单形式展示。Field Typepeople_id INT (P)name VARCHAR(20) 自定义名字age INTsex INTpic_url VARCHAR(50) 首次在摄像头范围内识别到某人员的视频帧URLvideo_url VARCHAR(50) 某人员在摄像头内出现时候的视频last_time DATE 某人员在摄像头中最后出现的时间
那么,我们先在本地的MySQL中建立一个名为video
的数据库,并且在该数据库下建立一张名为info
的数据表,具体SQL代码参考项目根目录下的info.sql
文件,PHP接口层封装参考项目build/info.php
文件,这里大家会好奇我为什么把PHP文件放在了一个名字叫build
的文件夹里,大家先别着急,一会就会给大家讲解。这里需要特别提及一下,因为这是我在开发机上搭建的模拟服务器环境,所以在PHP里我就直接用root去链接了,还有最后的输出,我们通过json_encode()
转化成了字符串,所以在前端接收数据时一定要记得JSON.parse()
。menu-btn
,click之后会跳出侧边导航栏,里面有两个li
,用于切换右边的content-box
里面的内容。“视频广场”对应的content-box
内有四个item
,用于展示我们的视频(后端实际上给了我四个视频流的URL),“出入信息”对应的content-box用于展示我们的数据库信息。整体的布局我使用的是flex
,主要原因就是两个——好用。其实本来想用grid
的,但发现太久没用了生疏了,而且还有一些新特性还是在测试阶段(说白了就是笔者好多地方忘了怎么写了),随意最后毅然决然了选择了flex
。之所以这样布局,一是符合现在流行的简约布局,最关键的是这样的布局方式更方便后期我们做响应式。PS:响应式的部分不在我们的三天内容内,以后如果有需要我会继续更新并深入介绍。$ npm init
初始化我们的项目,并在项目根目录下新建一个build
(或者dist
)目录用于存放我们的项目上线文件。新建一个src
目录用于存放我们的项目开发文件,在src
目录内新建一个public
(或static
)目录用于存放我们的静态资源,新建一个views
目录用于存放我们的静态页面。src
和build
的关系便是:src
目录下的源文件经过编译压缩等操作后将会生成到我们的build目录下,最后我们只需要将build
内的文件复制到上线服务器上运行就可以了,也就是说,build
文件内存放的才是我们最终的“产品”。src
目录内的views
目录下新建一个index.html
作为我们的静态首页并开始实现之前的UI设计,代码因为已经托管在了github上了,这里我就不作介绍了,大家争取自己尝试去复现一下项目,本项目的代码仅供参考。link
或者script
标签,但如果,当我们的项目越来越庞大,需要引入的文件越来越多的时候,那我们就得一直往html文件里添加标签,浪费人力不说,页面布满了link
和script
也不合适。作为前端开发的基本素养,这里我就视读者掌握了CommonJS,AMD,CMD以及ES6 Module的相关知识,在本文就不作提及,之后的代码我们都将以模块化的形式编写。webpack.config.js
(开发版),webpack.production.config.js
(上线版)。开发版用于开发阶段我们的调试工作,上线版用于项目最后我们生成上线文件时的打包工作。其实两份文件的内容相差无几,唯一的区别便是:相比与开发版的webpack配置文件,我们会在上线版的配置文件中增加代码压缩等功能,以实现我们的资源最大性能优化。.es
的形式,所以在配置文档里。我们应当在babel-loader
里的匹配项中加上/.es
publicPath: '/'
一行,增加之后插入HTML文件中的script
和link
标签的src
属性值的开头会增加一个‘/’字符,表示在根目录下的路径,目的是为了配合koa中的静态资源配置。如果你有CDN服务器,那就可以把publicPath填上你的CDN IP。$ npm i webpack@3
否则会报错),目的是提取打包后JS文件中的公共代码,因为每次我们引入一个模块(说白话就是require一次),webpack都会往打包后的文件添加这个模块里的代码,当项目的体积越来越大时,我们不免需要引入许多相同的模块,这样就会产生大量重复的代码,造成资源浪费,通过这一插件就能解决这一问题。clean-webpack-plugin
这款插件,目的是清空前一次编译后的文件。因为我之前提到过,我在JS和CSS文件名后自动添加了MD5戳,由于不会出现重名冲突,所以前一次编译的文件不会被替换,每次编译后都会增加一份文件,这是我们所不想看到的。运用这款插件的目的就是清空build
目录下的pubilc
和views
内的所有文件。package.json
文件,这里存放着我们项目的一些基本信息还有依赖文件,大家结合之前我们配置好的webpack,可以在文件中的"scripts"
属性中加入以下两行代码:"dev": "webpack-dev-server --open"
"build": "set NODE_ENV=production && webpack --config ./webpack.production.config.js --progress"
webpack.config.js
文件内的devServer
属性值。而第二行代码,是以webpack.production.config.js
内的配置编译项目,加入了这两行代码之后,我们在编译上线文件的时候就不需要敲一长串Shell啦,直接$ npm run build
就OK了。package.json
的作用不仅仅局限于制定我们的快捷命令,大家翻到文件的下方,会看到这两个属性:"devDependencies"
、"dependencies"
,前者是指开发环境下的项目依赖,诸如我们的打包工具webpack和后面将提到的gulp,还有我们的测试插件jest和supertest,这些都会在后两天的项目任务中深入介绍,而后者是指上线环境下的项目依赖,诸如我们的koa还有一系列koa引申的插件。在node环境中,我们使用命令$ npm i
将会自动安装所有的依赖,而使用$ npm i -S
和$ npm i -D
将会分别安装上线环境所需的依赖和开发环境所需的依赖,之所以这么区分的作用,我们将会在第三天的服务器上线任务中详细介绍,现在我们需要知道的是,在安装相关依赖时,你必须事先判断它是属于开发环境下的还是上线环境下的,并将他们区分开来,使用不同的安装命令。$ npm run build
并在build
目录下找到你编译好的index.html
文件,打开看看是不是你设计好的样式,还有正常执行的业务逻辑。如果出现了BUG,可以使用chrome的开发者工具打断点,或者在源代码中加上debugger
关键字(这个关键字的效果就相当于我们平时在开发者工具里打的断点)。关键词:直播,视频,简易,打造