Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Websocket 多对多流共享状态的设计模式_Websocket_Many To Many_Shared State - Fatal编程技术网

Websocket 多对多流共享状态的设计模式

Websocket 多对多流共享状态的设计模式,websocket,many-to-many,shared-state,Websocket,Many To Many,Shared State,为了好玩,我正在写一个在线白板应用程序,其中多个用户查看同一个白板并可以在其上绘图。我正在使用WebSocket(前端是vanilla JS,后端是Scala),现在基本上只是将鼠标事件从一个用户广播到其他用户,并在客户端呈现图像 然而,这会导致一个暂时的共享状态,而我希望用户能够随时跳上并看到保留的共享状态。我认为这可能需要在后端和前端共享呈现代码,以便客户端在事件流化时呈现事件,但服务器可以在客户端关联时发送原始图像数据 所以我的问题是:对于这种类型的项目,我应该注意哪些其他设计模式?这是一

为了好玩,我正在写一个在线白板应用程序,其中多个用户查看同一个白板并可以在其上绘图。我正在使用WebSocket(前端是vanilla JS,后端是Scala),现在基本上只是将鼠标事件从一个用户广播到其他用户,并在客户端呈现图像

然而,这会导致一个暂时的共享状态,而我希望用户能够随时跳上并看到保留的共享状态。我认为这可能需要在后端和前端共享呈现代码,以便客户端在事件流化时呈现事件,但服务器可以在客户端关联时发送原始图像数据

所以我的问题是:对于这种类型的项目,我应该注意哪些其他设计模式?这是一个有趣/学习的项目,所以这是一个开放式的问题,但我会接受一个答案,其中包含一些关于此类数据流的有用参考

所以我的问题是:我应该选择哪些其他设计模式 对于此类项目,您是否了解

您不必在服务器上具有呈现代码。您只需保存导致当前白板的所有累积事件,并将其发送到新客户端,然后让新客户端自行呈现白板,就好像它们在侦听最初发生的所有事件一样


如果数据量超过实际情况,则可以压缩原始事件。例如,直线或接近直线的线段不需要所有中间的鼠标位置,它只需要线段的第一个和最后一个位置。

@Nathan-这回答了你的问题吗?这是一个很好的答案,尽管我已经考虑过了。随着我拥有的鼠标事件数量的增加,它似乎变得非常昂贵,而且我不能在不损失太多分辨率的情况下压缩太多事件。我将暂缓接受答案,因为我正在寻找一些更多的外部资源进入一些广泛的模式,例如,如果能看到一些大型多人游戏如何解决这类问题的文章,那将是非常棒的。谢谢你的回答@Nathan-将直线段压缩到第一个点和最后一个点使用的数据更少,并且不会丢失分辨率,它与渲染图像一样精确,但更紧凑。因此,适当的压缩非常有意义,没有缺点。渲染保存每个中间点。这是矢量图形和位图图形之间的区别。谷歌从位图图形转向谷歌地图的矢量图形是一个巨大的原因。这样,效率更高。