中午吃饭时大略分析了一下Douyu的业务实现过程,趁着没人偶赶紧发上来……由于该平台尚未开源,分析可能存在某种程度的误差,对与不对有赖读者自辨……
咳, 经过一段相当漫长的钻研,偶得出如下结论:
就目前所见,Douyu项目由com.douyu.config,com.douyu.engine,com.douyu.engine.core,com.douyu.engine.db,com.douyu.engine.dialect,com.douyu.engine.http,com.douyu.engine.http.buf,com.douyu.engine.http.fileupload,com.douyu.engine.http.session,com.douyu.engine.http.util,com.douyu.engine.log,com.douyu.engine.util,com.douyu.http(不理解为什么不同com.douyu.engine.http写一起……),com.douyu.main,com.douyu.security,com.douyu.sql,com.douyu.tree,com.douyu.util等包组成。
由于重写了javac的部分java编码,Douyu可以“表面上”直接读取Java文件,也就是Douyu可以不需手动编译即可令Java文件被执行,也可以动态增删java文件内容,但与常见的java字节码修改不同,Douyu的动态特性依赖于添加相应字符串到java文件对应内容后的重新编译。
在Douyu的engine.core包下有两个非常重要的组件,堪称是Douyu的核心所在,一个是调用com.sun.tools.javac包的javac类,一个是真正用于处理Douyu中javac命令的CleverCoder类(在com.sun.tools.javac.main.JavaCompiler与com.sun.tools.javac.comp.Enter中被调用),应该说,javac只是一个调用数据的马甲,而核心在于CleverCoder。至于CleverCoder对于java文件的处理原理,则与jsp生成servlet的原理相类似(顺便说一下,前天偶提到Douyu只能加载静态页面,现在看来并不确切,应该是Douyu可以将view层转义为Java文件,再编译执行转义后的文件并反馈到页面中去,由于Douyu中存在ViewEntry,view数据也会经由updateView函数进行逐行分析后处理并反馈,其与jsp转servlet过程大同小异,但对其运行效率保留意见……)。
Douyu加载java文件与类使用自定义的ResourceLoader,其继承关系如下:URLClassLoader->LibClassLoader->ResourceLoader。
ResourceLoader内部依赖Javac,以ConcurrentHashMap缓存数据,Douyu在每次loadResource时都会判断目标对象是否存在,存在则调用已有对象,不存在则调用异化后的javac生成该对象。纵观整个Douyu平台对ResourceLoader的调用,显而易见Douyu中ResourceLoader重点不是用于加载class。与标准ClassLoader相比,ResourceLoader更像一个javac命令的缓存与执行器,它之所以存在,实际上就是要加载java文件本身,类加载功能反倒其次。
目前来说,ResourceLoader处理不同功能的函数接口并不统一,针对不同功能需要分别调用对应函数,例如在其DefaultContext中out时尚需要分别调用loadClassResource与loadStaticResource,而在Database的MetaData类中又需要调用compileClass(内部会调用findClassOrClassResource查询指定类,有类加载,没有则调用javac编译java文件后加载),到了http包下属的Connector里又得加载loadResource来匹配类与PrintWriter中数据。
Douyu目前涵盖有http请求与反馈、db操作、security验证等主要功能,但实现程度普遍较低。比如数据库方言仅支持mysql、oracle、sqlserver三种,而且只有mysql与oracle实现了不同的limit与非常少的操作优化,sqlserver部分暂时看还是空壳。security中的rule还只有一个接口,没有看到具体业务逻辑与调用,能够被checkPermission函数处理的Permission实现也非常有限。http协议部分虽然拥了有最基础的协议解读能力,但也仅仅是最基础的能力而已,比如目前我即不能向Douyu服务器要求对目标资源进行gzip压缩,Douyu也不可能根据浏览器判定此要求是否可行,更不要说反馈数据了,诸如此类的不足还有很多(仅以偶07年在各大小说网站刷票得到的http协议应用经验看),建议作者去找一份http1.1协议文档逐一比对并分别实现。没办法,谁让Douyu是个孤立的平台,开发难度自然大些(不过都写上的话,性能又会大打折扣,照目前的业务逻辑完全补足协议与相关功能后,我断言Douyu效率比不上Tomcat6,所以系统尚待优化)……
综上所述,窃以为Douyu平台在技术上存在可行性与创新性(如果作者有闲钱的话,可以考虑在国内申请个技术新型专利,最起码摆着好看),只是业务功能暂时不足,部分领域有待分工与优化,尚不具备很强的实用性,希望作者响应国父“革命尚未成功,同志仍需努力”号召,持续发展,与时俱进,吾辈就以观后效了……
以下拣选了两张分析代码时生成的Douyu关系图(感觉比较散啊,侵入性太强了……):
分享到:
相关推荐
【斗鱼弹幕数据分析】 斗鱼弹幕数据分析是一种利用编程技术、统计方法和自然语言处理技术,对在线直播平台斗鱼上的用户产生的弹幕进行深入探究的过程。这种分析旨在揭示观众的行为模式、情感倾向以及对直播内容的...
斗鱼产品分析:泛娱乐直播平台的探索之路.pdf 文件提供了对斗鱼产品的详细分析,涵盖产品拆解、竞品分析、用户分析、用户调研、功能分析与优化建议方案等多个方面。以下是对斗鱼产品的详细分析: 一、产品拆解 ...
【高仿斗鱼直播App项目】是一个针对学习者设计的实战项目,旨在帮助开发者深入了解和掌握构建类似斗鱼直播应用程序的技术和流程。这个项目不仅涵盖了移动应用开发的基础知识,还涉及到了实时流媒体、社交互动、用户...
斗鱼直播源数据指的是直播平台上的实时信息,如直播间ID、主播名、观众数量、礼物数据等,这些数据对于分析直播热度、用户行为和市场趋势非常有价值。 标题中的"斗鱼直播源数据的获取"是指通过特定方法抓取和解析...
斗鱼直播竞猜项目
综上所述,实现"C#斗鱼直播弹幕实时获取"的项目需要掌握以下关键技能: 1. 熟练使用C#语言,包括面向对象编程和异步编程。 2. 理解并能应用TCP网络编程,如`TcpClient`类的使用。 3. 掌握JSON解析,能够处理从服务器...
该项目是一个基于Vue.js技术构建的移动端应用,旨在复刻斗鱼直播平台的手机客户端功能。在不包含评论功能的前提下,该应用实现了与斗鱼官方API的对接,为用户提供了一个接近原生体验的直播观看环境。 首先,我们来...
在Swift项目仿斗鱼中,我们探讨的是使用Swift编程语言来构建一个类似于知名直播平台“斗鱼”的iOS应用。这个项目旨在帮助开发者了解如何利用Swift进行iOS应用开发,特别是涉及网络数据抓取、UI设计以及实时流媒体...
在分析“斗鱼主页源代码”时,我们可以深入理解网页开发、前端技术、用户体验设计等多个IT领域的关键知识点。 1. HTML 结构: 斗鱼主页的源代码首先会展示HTML结构,这是网页的基础框架。它包含了头部(head)、...
在这个名为“爬虫脚本项目源码-爬取斗鱼颜值主播”的压缩包中,包含了一个针对斗鱼直播平台颜值主播信息的爬虫项目。这个项目主要使用Python语言编写,旨在自动化地抓取斗鱼直播平台上高颜值主播的相关数据。下面...
【手机斗鱼图片爬虫】项目是基于Python的Scrapy框架设计的一个专门用于抓取斗鱼直播平台上美女主播图片的工具。Scrapy是一个强大的、高效的Web爬虫框架,它允许开发者方便地构建和管理网络爬虫项目。在这个项目中,...
【标题】"仿斗鱼直播APP"所涉及的知识点主要集中在Android平台上的直播技术实现,以下将详细解析这个项目可能涵盖的关键技术。 1. **Android应用开发基础**:仿斗鱼直播APP首先需要掌握Android的基本开发环境搭建,...
"src"则是项目的主要源代码目录,包含对接斗鱼直播的核心业务逻辑。 总的来说,这个PHP demo案例涵盖了斗鱼直播API对接、缓存策略、安全性验证(Token)、前端IFrame嵌入等多个关键知识点,对于想要进行直播平台...
这个项目旨在实现斗鱼直播平台的数据抓取,并进行有效展示,帮助用户理解直播数据的动态变化和分析。 【描述】:该项目在Windows 10或11操作系统环境下已经过验证,运行良好,包括了完整的项目源码和详细的项目说明...
"斗鱼自动发送弹幕 图像匹配"这个项目是利用Python的图像识别和自动化功能来实现的一个具体应用。斗鱼是一个知名的直播平台,用户可以通过发送弹幕与主播和其他观众互动。在这个项目中,开发者创建了一个自动脚本来...
【斗鱼直播demo】是一个基于斗鱼直播框架的示例项目,主要面向iOS开发者,用于展示如何在Xcode 8及更高版本中集成并实现斗鱼直播功能。这个压缩包包含了一个名为"DouYuZB-master"的源代码仓库,里面应该包含了完整的...
【斗鱼直播间增强插件(Tampermonkey).zip】是一个使用JavaScript编写的浏览器扩展,主要针对斗鱼直播平台进行功能增强。Tampermonkey是一款非常流行的浏览器插件,它允许用户自定义添加JavaScript脚本来修改网页的...
【Swift仿斗鱼直播】项目是一个使用Swift 4.0编程语言实现的iOS应用,旨在模仿斗鱼直播平台的功能和用户体验。这个项目对于学习iOS开发,特别是与视频流和直播技术相关的开发人员来说,是一个非常有价值的参考。下面...
基于python+pyqt5实现的斗鱼爬虫实例项目源码(课程大作业).zip基于python+pyqt5实现的斗鱼爬虫实例项目源码(课程大作业).zip基于python+pyqt5实现的斗鱼爬虫实例项目源码(课程大作业).zip基于python+pyqt5实现的斗鱼...
斗鱼Html5播放器Chrome插件,可自动取代斗鱼页面的Flash播放插件,使用html5进行播放。