V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hamsterbase
V2EX  ›  程序员

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

  •  
  •   hamsterbase ·
    carytrivett · 2023-07-16 14:57:11 +08:00 · 1455 次点击
    这是一个创建于 496 天前的主题,其中的信息可能已经有所发展或是发生改变。
    内部一共划分了五个模块,在不同的环境,模块会使用不同的信道进行通信。

    在 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 之后也会补充对应的测试用例。
    4 条回复    2023-07-22 10:39:33 +08:00
    superhack
        1
    superhack  
       2023-07-21 15:01:11 +08:00 via Android
    imac intel cpu 啥都不干都整天 150%,能说说你的 docker 里的 app.js 在做什么吗,0.8.0 版
    hamsterbase
        2
    hamsterbase  
    OP
       2023-07-21 20:44:01 +08:00
    @superhack

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

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


    不好意思,我尝试优化一下。setInterval 后面的 1e3 改成 1e5 , 就是每隔 100 秒扫描一次了。
    hamsterbase
        3
    hamsterbase  
    OP
       2023-07-21 23:01:24 +08:00
    @superhack 试试看 0.8.1 , 优化了 CPU 占用。
    superhack
        4
    superhack  
       2023-07-22 10:39:33 +08:00
    @hamsterbase 好了很多,不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2436 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.