因为之前我们server不存东西
我们 发现 后打开的网页 是接手不到之前的变化,不能更新到最新的变化的。
我们需要做到server给client发最新的代码已达到同步
我们有三种做法同步到最新的代码
1.保存每一一个change events
(Keep All Change Events)
[event_1,event_2,......event_n]
每一个change events都记录下在一个list里面 确定就是内容太多 繁杂(很多没必要的change 比如添加了一些代码 又删掉了一些代码,又重新写了一些代码,其实我只是要最新代码) 就很长 没必要
2.记录最新代码的快照信息(keep latest Snapshot) 缺点就是 server压力变大(需要维护一个editor内容),不能回滚。
3.记录(Combine Snapshot and change Events(Adopted))
{snapshot_n,[event_n,event_n+1.event_n+2.....]}
最佳 整合 1 2 的优点 做到 就保存1个小时之内的change evets,将一个小时前的做成Snapshotlist
这样既可以同步到最新的代码,又可以回滚,server压力又不大
我们先来完成第一种做法
我从client端开始 去service写个方法
buffer就是当前代码
restoreBuffer()就是储存代码的方法
我们service 只需向server发出请求信息(要最新代码的list)“restoreBugger”既可
这样server端就知道你请求最新代码
所以,我们去editor去调用咱们 这个service
那么什么时候会调用这个service的这个方法呢?
肯定是昨晚itin初始化以后
主动调用一下
ok 上面就是client端发送请求到最新代码的写法
下面写 server端收到这个‘restoreBuffer:’的请求后,如何返回最新的代码给client端?
我们可以将server端的内存中保存的各种change events 直接全部发给client 也可以 一个个events发
取决你如何设计,那么问题来了。如何保存在内存中呢?
这就引出了redis
为什么用redis呢? 因为可以将这些list保存在内容中
那么是不是全部都要保存呢?不是,不如编辑器里一个人都没有了,我们也不知道什么时候你会来,所以呢?我们将代码变化存在redis里面,保存(比如1h?)
我们先来安装redis