分享一下 HamsterBase 是如何用一套代码实现 iOS,安卓, Windows, macOS, Linux , docker 服务版的。

2023-07-16 14:57:11 +08:00
 hamsterbase
内部一共划分了五个模块,在不同的环境,模块会使用不同的信道进行通信。

在 Docker 版里,前后端会使用 websoket 通信。
在桌面版里,前后端会使用 Electron IPC 通信。 (代码是从 vs code 拷贝过来的)

前后端共享了同一个 interface , 通过 IPC 抹平各个环节差异, 可以在前端直接调用 nodejs 的实例,无需二次封装 http 接口。

1. HB PC : PC 版前端代码
2. HB Phone : 手机版前端代码
3. HB Server: NodeJs 写的后端代码
4. HB RN Shell : 用 react native 套壳
5. HB Electron Shell:用 Electron 套的壳

对外是三个产品, 由模块组成

a. HamsterBase Selfhosted: 支持 docker 部署的服务器版

1 + 2 + 3: 服务器 + 前端 + 手机版前端

b. HamsterBase Desktop: 支持独立运行的桌面版

1 + 3 + 4 + a (可以在桌面端启动服务端)

c. HamsterBase Pocket: 支持独立运行的手机版

2 + 3 + a


因为项目本体是 js 全栈,不依赖任何闭源的二进制,所以兼容性非常好,不会因为系统升级而失效。

项目本身前后端一体,不依赖任何外部服务,所以可以很好的进行 E2E 测试,每次发布之前都会跑一遍集成测试,修复 bug 之后也会补充对应的测试用例。
1455 次点击
所在节点    程序员
4 条回复
superhack
2023-07-21 15:01:11 +08:00
imac intel cpu 啥都不干都整天 150%,能说说你的 docker 里的 app.js 在做什么吗,0.8.0 版
hamsterbase
2023-07-21 20:44:01 +08:00
@superhack

后台有几个定时任务. 间隔都 1s (搜 setInterval 可以搜到,

1. 轮训检查 workspace/inbox 文件夹,查看是否有可以导入的 html 文件
2. 轮询检查 workspace 文件夹,查看是否有有云同步的网页,有的话更新数据库。
3. 轮训解析 html 文件,用来全文搜索


不好意思,我尝试优化一下。setInterval 后面的 1e3 改成 1e5 , 就是每隔 100 秒扫描一次了。
hamsterbase
2023-07-21 23:01:24 +08:00
@superhack 试试看 0.8.1 , 优化了 CPU 占用。
superhack
2023-07-22 10:39:33 +08:00
@hamsterbase 好了很多,不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/957144

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX