服务器存储大约二十KB大小的字符串。该行定期被类似的行替换,变化可能是:
- 如有必要,添加一个小片段,将所有内容向右移动
- 删除一个小片段,如有必要,向左移动,所有内容都向左移动
- 将小片段中的数据替换为其他数据
及其各种组合。我们所说的小片段通常是指不超过五十字节。
服务器需要在每次更新此行后向所有善意客户端提供最新版本。由于更改相对于行的大小来说很小并且频繁发生,因此发送整行在流量消耗方面过于浪费。连接可确保所有数据包均按相同顺序无损坏、丢失、重复地传送。
我认为这个问题可以通过以下方式解决。除了线路的当前状态之外,服务器还将存储发送给客户端的最后一个数据包到达时应在客户端中的线路状态。在这种情况下,不必重新发送全部 20 KB,而只需重新发送特殊编码的更改即可。关于从新旧版本的二进制数据生成这种特殊编码的更改的主题,我可以查看哪些算法或实现?
您需要Levenshtein 距离的变体,Damerau-Levenshtein 距离。计算该对(客户端上的字符串,服务器上的字符串)。在计算过程中,存储将客户端字符串转换为服务器字符串的操作序列。将序列发送给客户端。客户端会将其应用于其字符串并接收与服务器相同的字符串。