我正在做一个实时Vue项目,它使用ckeditor5作为文本编辑器。Pusher是一个使用websocket的实时API,用于将事件实时广播到其他Pusher实例。This is Pusher
在ckeditor配置中,我传递了一个set回调。这个set回调在任何文本更改时触发,我使用它来触发pusher事件,将文本值广播到其他pusher实例。
当另一个推送器实例接收到事件时,问题就出现了,在处理事件后,Vue会反应地更新DOM中的文本值,从而触发上面提到的set回调,从而再次触发事件。在实时环境中,它会扰乱值更新,并以文本闪烁结束。
在回调中,我只得到一个字符串值,我找不到是什么发起了回调,因此无法停止执行。
有没有办法防止ckeditor5触发回调?
这可能是每个基于websocket的项目都存在的问题。
发布于 2020-02-18 01:26:08
问题是,当更改触发广播时,Pusher客户端接收并应用它,然后随着客户端的更改而广播。当原始广播者接收到改变时,它不能确定它是否是它自己的改变,并且再次应用它。
在我几次尝试创建一个ckeditor插件来过滤掉ckeditor实例本身已经初始化的传入更改之后,我决定做一个变通来解决这个问题。
我创建了一个缓存,在广播初始化的更改之前,它会将它们存储几秒钟。当从Pusher客户端接收到更改时,该更改仅在缓存中不存在时才会应用,因此它是由另一个客户端初始化的。
此解决方法在大多数情况下都有效,但如果internet连接速度非常慢且响应时间较短(这取决于缓存时间),则仍可能存在问题。
https://stackoverflow.com/questions/59863345
复制相似问题