2017-06-18 38 views
1

这是一种情况。假设我正在为浏览器构建一个在线2人游戏,其中一个目标是为这两个玩家产生一些东西(一个对象)在屏幕上的同一个地点并使其沿线性轨迹行进与相同的速度。最好是实施“服务器打勾”,它可以移动对象(或对象),使浏览器的作业成为作业。我明白将它留给浏览器的不好的含义,但我也担心服务器上的大负载或其他问题。关于如何通常实施的任何想法?在线多人游戏中常见的“嘀嗒”怎么办?

+1

你不能有客户,如果这个协调你期望所有的客户ts会看到同样的事情。不同的连接速度和加载时间会导致它失败。给客户这样的责任也可能是危险的,因为客户的信息可以很容易地被他们操纵。向客户端提供来自服务器的数据副本,以便它们不能破解这些值。 – Carcigenicate

+0

谢谢,这是我最初的想法,但是确保服务器上每个客户端都能够很好地满足客户数量的增长? 编辑:技术是使用nodejs的网络套接字 – user6754277

+0

我没有写过任何超出简单玩具的任何服务器/客户端游戏,所以我不能回答这个问题。一般的规则是对客户给你的任何数据都不信任,并且有能力改变。假设你有客户每隔几毫秒更新一次轨迹。任何具有任何编码知识的人都可以打开开发人员工具,找到更新功能,并将其更改为自己想要的任何内容。如果他们阻止对象移动,你能相信他们提供的关于他们与对象交互的任何数据吗? – Carcigenicate

回答

3

在概念上,有三种方法来实现这一目标:

  • 纯服务器端模式
  • 纯客户端模式
  • 混合模式

让我们看到了几个细节他们每个人。

enter image description here enter image description here enter image description here

将此应用于在三种不同模式的情况下,将意味着:

  • 在纯服务器端模式,您发送的轨迹的坐标,实时到两个浏览器。每个浏览器只接收坐标并在接收到的位置显示对象。你可以看到这种方法的一个实例。使用两种不同的浏览器转到http://push.lightstreamer.com/,并在右下角演示中移动角色。角色和球的所有动作由服务器决定,协调坐标,并实时广播给所有客户。在纯粹的客户端模式中,您将共享一个初始的世界状态,然后每个浏览器将计算它自己的世界进化,并有可能的分歧。

  • 在混合模式下,浏览器在纯客户端模式下执行自己的计算,但是它们会定期通过低频率服务器端广播进行同步。所以,物理运行在服务器端和客户端。

最简单的解决方案是纯服务器端模式,它在非复杂的情况下是完美的。为了使其具有可扩展性并能够容忍网络延迟,您需要一个特定的服务器,就像这些演示中所用的服务器[完全公开:我参与了此类服务器]

要获得更多详细信息,可以查看一些资源我在过去准备: