前言
思源 s3 或 webdav 同步,如果自动同步的话,官方最快也要 10 分钟左右,虽然云端选项里说,数据不动后 30 秒后同步,但实时上,真正两端同步要 10 分钟左右,甚至更久。
但官方同步也提供了同步感知功能,可以在 30 秒左右实现两端真正的同步。
这个功能很不错,但需要年订阅及同步空间受到 8G 限制。
那么如果使用 s3 或 webdav 能不能实现像官方同步那样的同步感知功能呢?
当然可以,这个脚本就是为了解决这个问题而开发的。
先看效果
左侧 PC 客户端,右侧手机客户端。
这是同步间隔 2 秒钟的效果,2 秒后开始同步(请仔细观察下方的同步状态),受限于网络,实际同步效果可能会有几秒钟的延迟。
完整脚本如下
gitee 备份代码:如果上述代码无法访问,可点击这里访问备份版。
原理
本脚使用 GoEasy 平台的 webscoket 开发,因此需要先去平台注册账号和创建应用。不过别担心,这些操作非常简单,下面会一步步介绍。
GoEasy 平台承诺永久免费,但有一定的限制,不过对我们做思源同步来说功能足够了,官方提供了国内和国外服务器,速度很快。
使用方法
-
注册账号,去官网这里 https://www.goeasy.io/cn/signup.html 注册,这个无需多说。
-
创建应用,登录后,到这里 https://console.goeasy.io/#/application 创建应用。
应用名随便输入即可。
建议选择杭州服务器和基础型,基础性默认每月有 10 万条消息。日活用户数量,就是支持的客户端数。那么消耗的消息数=客户端数 x 1 + 1,比如,你推送了一条消息,有三个客户端成功接收,那么您总共消费的消息量为 1 + 3 = 4 条。
这里虽然说免费 5 年,但官方首页说永久免费,不知道是否仅这个应用限制 5 年,如果是这样的话,那么 5 年后删除该应用,重新建个应用应该可以的。
每月 10 万条基本上够用了,如果不够,只需要每次同步时延迟同步时间就可以了,后面还会说明。
-
获取 appKey,创建应用后,即可去应用详情页查看 appKey 了,这里用 Common key 就可以了,如图
-
把上面的完整脚本复制到 js 代码片段中,然后把
const appKey = 'BC-xxxxxx'
参数修改为你刚才的 Common key 即可。 -
刷新或重启思源,就可以了。
参数说明和注意事项
- 参数
jsPath
默认使用官方的 cdn 链接,这里建议下载到本地,访问速度更快。 autoSync
参数,如果设置为 true,当内容修改时会自动同步,如果设置为 false,只有手动点同步按钮时,才会通知其他客户端进行同步。autoSyncInterval
参数,自动同步间隔时间,单位秒,默认 30 秒,不宜设置过小,过小则易导致冲突,且频繁输入时可能导致频繁同步,从而导致较耗资源。不过,别太担心,设置适宜的同步间隔一般没有性能问题,因为脚本仅在文件变化后才同步,文件无变化不同步,因此,一般不会导致性能问题。如果 autoSyncInterval 秒内多次被改动,仅最后一次同步改动后 autoSyncInterval 秒后才同步,所以这个值不宜过小,过小会导致频繁同步。另外,同步过于频繁也会比较消耗 GoEasy 的消息数,换句话说,如果消息数不足时,可以把该参数适当设置大点即可。syncActions
参数,需要同步的操作,可根据自己的需要增删,注释或删除不需要的操作即可关闭,但这个列表并未包含所有修改操作,仅包含一些常用操作。- 必须配置了 s3 同步或 webdav 才行,官方同步不支持(官方同步,请使用官方自带的感知功能)。且该脚本仅在 s3 同步下测试通过,webdav 的用户请自行测试,如果有问题可以自行解决或本帖反馈。
- 虽然实现了接近实时的同步功能,但仍然需要按交替进行操作文档且同步期间不宜操作文档,否则容易造成冲突。
- 如果同步选项选择了 30 秒后自动同步选项可能会存在和系统的自动同步同时被触发的情况,虽然这个概率很小,因此使用该脚本时,推荐选择手动同步(开启和关闭时自动同步一次)选项,这样最大程度的减少冲突的可能,虽然通常影响不大。(这里有个疑问,不知道系统自动同步是如何实现的?没发现调用 api 和 websocket,难道是内核内部自动同步的,没和前端进行交互?有知道的大佬请告知下,先谢谢啦!)
免责声明
同步有风险!同步前请做好备份!!!请在新空间测试无误后再使用!本脚本仅用于学习交流,造成的任何后果均与脚本及作者无关。
鸣谢
listenChange
函数参考了 @muhanstudio 大佬的代码。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于