rwv / chinese-dos-games

🎮 Chinese DOS games collections.
https://dos.lol
GNU General Public License v3.0
8.65k stars 1.04k forks source link

参考Emularity引入ZIP游戏打包和不清除缓存的情况下的存档功能 #10

Closed pengan1987 closed 6 years ago

pengan1987 commented 6 years ago

要求的功能 楼主可以参考互联网档案馆Archive.org的Emularity项目实现ZIP格式游戏包的支持和不清除缓存情况下的游戏存档 https://github.com/db48x/emularity

优先度

Emularity使用了BrowserFS在浏览器中构建一个虚拟的文件系统,这个文件系统使用了浏览器的IndexedDB功能,因此具有一定持久性,可以实现不清除缓存状况下的游戏存档,而且ZIP包的下载体积也要比package小很多。

建议网站做动静分离,把游戏镜像放到阿里云OSS、Azure Blob Storage,Amazon S3或者类似的云存储中,规避服务器本身的流量和性能问题。包括那个比较大的dosbox.js都可以放到存储里面去,避免web server反复gzip带来的压力。

不是太建议把游戏的可执行文件放在这个repository里,可能会有版权问题,也会导致repository变的非常大,同时也可以考虑把游戏信息(介绍、执行文件名等)做成xml或者json的metadata文件,和网站框架分开维护,可以参考一下archive.org的模拟器区。

几个例子: 这个是使用Emularity,纯静态化页面和JS的仙剑 http://jsemu.oss-cn-shanghai.aliyuncs.com/emdosbox/pal.html

这个是使用v86的Win95,使用browserfs加载ZIP后的img镜像,也是纯静态页面的 http://jsemu.oss-cn-shanghai.aliyuncs.com/v86/win95.html

我的知乎专栏里还有一些其他的模拟器,全部都是只依靠阿里云OSS的静态页面,有兴趣可以去看一下 https://zhuanlan.zhihu.com/p/42973469

rwv commented 6 years ago

谢谢你的建议!🙏

  1. 对于 ZIP 格式游戏包压缩相关的,通过 nginx 的 ngx_http_gzip_static_module 可以缓解,但目前还没有实装。
  2. 由于一开始没有想到会有这么大的曝光度,只是一个兴趣项目,所以一切都是从简的,也是没有做很多考虑。动静分离来说现在是全站在 Cloudflare 后面,且开启了 Cache everything。服务器压力是非常小的,只不过对于国内玩家可能有些不太友好。由于现在目前流量是非常大,对于放到云平台上没有打算,不然可能就要上广告补贴服务器费用了。
  3. 最开始本项目基于 v86 的,且已经完成了存档功能。但 v86 现在还有许多 bug,可以说是基本上不可用。
  4. 主要还是创立项目初期并没有考虑到会有这么大的曝光度,所以可以说是怎么简单怎么来了。把二进制文件也放进了 repo,版权的确是一个很重要的问题,还是把它放在外部网站比较好。
  5. 存档的话之前就准备通过 IndexedDB 进行开发,但是目前还没有上手。不过假如有现成的库也是很好的。
rwv commented 6 years ago

@pengan1987 完成!