基于Git/SVN或任意系统的任意网络数据自动同步方案思考
代码同步,或其他数据同步,都有一定的应用场景。
最常见的需求,就是代码同步。尽管已经有了 Git / SVN,但是仍然不能自动同步,一次手动点击会仍然是非常麻烦的。
常见的脚本方案,比如简单的定时拉取,或者 webhook,都可以实现我们的需求。
但是这里,更关注于讨论同步原理。
无论是 git / svn ,还是其他任意自研系统,首先要实现对推送更新的检测,一旦其中客户端推送更新,则服务器做出响应,以通知其他客户端拉取最新文件。
另外,webhook很难解决跨网络问题,比如服务器在公网,我希望通知另一个本地电脑更新,则无法实现,此时应该使用 websocket 连接双向通知,也就是除了 webhook 以外,以 websocket 作为服务器通知客户端的辅助方式,这样就实现了任意网络下服务器通知客户端,此时自动触发客户端的拉取功能就可以实现数据同步。
借助 Git 和 webhook 的一些实践。
本地开发和线上开发环境:可以使用 gitee + webhook ,在本地开发完毕,推送至 gitee,由 gitee 触发 webhook 通知线上服务器,线上服务器从 gitee 拉取文件即可。
团队局域网开发环境:在其中一台局域网电脑搭建 gitlab 作为服务器,局域网中任意一台电脑推送数据,则触发多个 webhook 通知其他多台局域网电脑进行文件拉取。
跨网络本地开发环境:搭建一台公网服务器,多台本地电脑(不同局域网)以 webhook 连接至公网服务器,任意一台电脑推送文件后,webhook 通知其他电脑拉取文件。
上述几种方案,都是可行的,理论上可以满足任意同步需求,至于第三种方案对小白来说手动搭建比较麻烦,而且通常需要自主研发,若需求不高可使用免费产品,例如:坚果云。
文章作者: 朱丰华
文章链接: https://smart.52dixiaowo.com/blog/post-85.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。