2016-11-30 84 views
0

作为一个原型,我正在使用javascript和websockets在画布上制作多人绘画游戏。条件是服务器无法以任何方式生成画布。所有的模型逻辑都发生在客户端。如何使服务器没有权威的网络架构

现在我有以下设置:

1)当输入发生在客户端将其转移到服务器并保存。服务器做了一个非常简单的验证检查。

2)每15毫秒(在服务器上),所有输入都发送到客户端并清除。客户端在本地呈现输入。

3)每200毫秒每一个客户送他们的帆布的版本在那里保存

4)每200毫秒服务器票“正确”版本的服务器,并把它备份到客户那里更新他们的画布。正确的版本使用时间戳存储在服务器上。

5)当一个新的客户端连接时,他们从服务器获取最新的正确版本的画布。

尽管这种方法提供了多人绘画与持久状态,但它也带有一些问题。什么是正确的版本,他们如何投票?当客户遇到类似10秒的延迟并发送他们的版本时会发生什么?另外,如果每个客户端都在不断地进行本地更改,每个客户端的画布将永远不会完全相同,这使得它变得不可能?找到正确版本的画布,因为它们在发送到服务器时都有所不同。

问题可以归结为:可以制作一个依赖客户端 - 服务器的架构,其中客户端执行所有逻辑并且服务器只检查输入是否有效?即使它需要更多的网络流量。如果是这样,什么是一个好的接近?

+0

也许客户总是应该每隔15ms将画布和输入一起发送。除了每〜200ms,服务器大部分时间都会丢弃画布数据,然后保存画布的一个版本。这当然会大大增加交通负荷:) – xCander

回答

0

经过进一步调查,我发现了一些关于上述问题的优秀文档。

拥有一个仅客户端的网络模型可以被描述为一个对等交换模型,并且实际上是在帝国时代1 + 2中使用的。但是,由于微软面临的几个问题让客户端同步运行(以及小的变化打破了游戏),我决定使用服务器模型而不是一些快捷方式来实际启用服务器来合并模型。