8000 GitHub - jdmy/web_danmu: 讲座人使用该程序后,听众可以在对应web上输入吐槽内容对讲座进行吐槽
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
/ web_danmu Public

讲座人使用该程序后,听众可以在对应web上输入吐槽内容对讲座进行吐槽

Notifications You must be signed in to change notification settings

jdmy/web_danmu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

分享会弹幕吐槽器介绍


1. 项目名称:分享会弹幕吐槽器


2. 项目简介

本应用是在python3环境下,使用tkinter实现客户端图形界面,使用flask web框架构建web的弹幕吐槽应用。

目前本应用在本人的服务器上有一个实例:jdmy的个人网站

  • username:admin

  • password:admin

欢迎围观并留下吐槽

服务场景:++小型分享会++(PS:场景特点是人员都集中在一个房间内,且具有一个轻松愉快的氛围)

服务对象:++主讲人、观众++

主要功能:

  1. 为观众呈现可吐槽的页面
  2. 为主讲人以弹幕形式呈现观众吐槽的内容
  3. 为分享会带来互动性和一定的娱乐效果

服务方式:++主讲人在一个服务器上部署应用服务器端,并在投影的电脑上用python打开应用客户端,再把对应的URL、登陆账号和密码公布给观众,观众用手机浏览器打开url并登陆之后即可输入吐槽内容,吐槽内容会以弹幕的形式在主讲人的电脑上呈现。++


3. 时序图

sequenceDiagram
手机端->>服务器端: 登陆
服务器端->>手机端: 登陆后的界面
手机端->>服务器端: 发送弹幕内容
服务器端->>客户端: 传递弹幕内容
客户端->>客户端桌面:呈现弹幕

4. 详细设计

服务器端:

app类(web路由)
danmu_input()让观众输入吐槽内容的页面
danmu_get()让客户端获取吐槽内容,对观众是隐藏的
login()观众登陆页面
logout()让观众注销登陆
forms类
DanmuForm(FlaskForm)继承于FlaskForm,用于生成页面表单

客户端:

danmu类
self.text 内容
self.id 主键,删除弹幕时用得到
self.x 弹幕x轴
self.y 弹幕y轴
init(self, text, id, x, y)弹幕内容、坐标初始化
move(self)控制弹幕的移动方式
danmu_GUI类
self.ws 获取屏幕宽度
self.hs 获取屏幕高度
self.canvas 构建画布
self.colors 设定颜色集
self.q 与socket_connect类进行进程间通信的队列,用于获取弹幕
MainWindow(tkinter.Tk)主界面,非透明,可用来关闭客户端
FloatingWindow(tkinter.Toplevel)透明界面,用来呈现非透明的弹幕
danmu_handler(self)处理弹幕,使弹幕以设定好的的方式移动,并删除掉已经到达终点的弹幕
danmu_add(self)根据self.q内的弹幕内容创建画布上的弹幕,弹幕的大小、颜色、初始y轴位置随机
init(self, q) 初始化
socket_connect类
self.url 用于设定服务器端的url
invoke_sock(q)用于向服务器进行轮询,若返回的内容有效,则将其通过通信队列q传输到danmu_GUI类

5. 项目总结

本应用的服务器端到客户端的通信,最初是通过socket通信实现的,主要思路就是服务器端进程开一个线程,线程另开一个端口执行socket通信,但是这样与flask web框架极不兼容,只能够在调试环境下成功运行。

于是我果断放弃了用socket进行实时推送弹幕数据的方法,改为最为简单可靠的轮询机制。这样子只会带来弹幕显示的一点延迟,但是极为可靠

本应用的扩展性极高,经扩展,可以存储弹幕到数据库、自定义弹幕颜色、大小、移动速度

About

讲座人使用该程序后,听众可以在对应web上输入吐槽内容对讲座进行吐槽

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0