多人白板比赛条件

本文关键字:条件 白板 | 更新日期: 2023-09-27 17:58:21

想象一个多人白板,几个人可以同时画画。为了简单起见,假设白板上有一个对象,任何用户都可以移动或删除它。没有用户拥有的对象的概念(即,允许任何用户操作任何对象很重要……这是一个免费的白板)

我的问题是。。。如果两个用户同时尝试对对象执行不同的操作,即一个删除对象,另一个移动对象,会发生什么?

现在,让信息通过,一切都不正常了。

一个想法是有一个服务器端控件来解析谁拥有对象的控制权,在冲突解决之前,客户端不允许发生任何事情。解决冲突可以建立在先到先得的基础上。

尽管这种情况可能发生得很快,但小延迟(约50-300ms)是不可接受的,因为客户端的移动必须是即时的。例如,想象一支笔,而不是操纵对象。因为他们已经开始画画了。。。不好!

另一个想法是有一个"请求控制"按钮,它请求服务器端扩展进行控制。。。。和以前的想法一样,但现在他们并没有因为钢笔画的最初延迟而感到沮丧。这也不太好,因为他们必须按下按钮,直到他们能做任何事情,而这块白板真的是为孩子们准备的。。。

还有其他解决方案吗?:)

多人白板比赛条件

这是一个有趣的问题,通常通过客户端和服务器端的组合解决。如果你熟悉魔兽世界,尤其是最初发布的日子,你会记得服务器崩溃,每个人都在继续移动。这是通过客户端管理预测移动,并请求服务器定期更新实际位置和行为值来完成的。

类似的想法应该适用于你的问题。基于f.c.f.s的服务器端解决方案似乎很理想。您提到的问题是延迟降低了用户体验。为了消除这种情况,为什么不让用户完全控制客户端,然后在操作后从服务器请求更新?因此,如果你把一个圆圈向下移动200像素,我把颜色改为绿色,我们都可以看到客户端的即时行为,但当你释放这个圆圈时,你也会看到它变成绿色,这是通过服务器告诉你的。

当两个用户都更改对象的相同属性时,问题就显而易见了。在这一点上,f.c.f.s系统将需要根据客户的使用情况做出决定。它应该对对象执行净增量吗?您是否应该通知用户另一个用户以不同的方式更改了对象?这与其说是技术问题,不如说是一个功能问题。

真有趣的问题!白板的状态存储在服务器上(例如数据库中)。客户端上有3个可能的操作:startEditingfinishEditingdelete。在执行某个操作之后,您应该向服务器发送一条消息来描述某个操作。

如果发送了startEditing,首先应该检查要编辑的对象是否没有锁。如果它是解锁的,你应该锁定(锁定应该包含关于锁定用户的信息)。然后,您应该向所有活动客户端发送消息,告知该对象不应该被编辑。

如果发送了finishEditing(这个应该包含关于对象更改的信息),您应该在DB中更改对象,释放锁,并向所有活动客户端发送消息,告知更改和释放锁。

如果发送了delete。如果该对象未被与发送消息的客户端不同的客户端锁定,则应从DB中删除该对象,并向所有活动客户端发送消息,以便从白板中删除该物体

您可以在其中显示本地项目交互以及其他人看到的内容。一开始,你会展示一些东西,比如,与你互动或写作的透明对象不是最终的,每个人都看到不透明的对象/图纸是最终的,以及人们所看到的。

当你检测到两个用户同时移动一个项目时,在他们自己的屏幕上,他们都是透明的,在一些多人游戏更新的过程中,被确定有控制权的用户仍然在移动该对象,你可以显示用户移动其对象的某种事件(可能是一个普通的poof),而该对象现在被确定不在他们的控制范围内。

通过这种方式,当他们决定不控制某个项目时,你会得到即时的绘图响应和不时的一些沮丧。