html - WebSocket 性能

标签 html canvas websocket multiplayer

我正在考虑实现一个涉及快速运行对象的 HTML5 mmog。玩家通过射击来不断改变该物体的方向。我想到了 WebSockets 等 (socket.io) 和 canvas

我认为方向变化的计算必须在客户端和服务器端完成,然后同步 - 以服务器为主以避免作弊。

我担心的是,无论服务器速度有多快,延迟都会导致延迟,从而终止同步。

这个谜题有什么好的解法吗?如何实现如此大量的数据的实时同步,其中所有信息都对不错过方向变化至关重要。所有玩家都需要立即获得移动物体的新方向,以免破坏游戏玩法。

我假设这个问题已经在现有的 mmogs 中得到解决。

有什么想法吗?

最佳答案

在这种情况下,您可以做的最好的事情是尝试预测客户端的运动(航位推算),然后在必要时/在必要时使用来自服务器的数据校正位置/速度。

例如,假设您的快速奔跑对象正以 5 的速度从左向右移动穿过屏幕,一名玩家向它射击并改变方向,因此它现在以 5 的速度在屏幕上向上移动( 90 度转弯)。

客户端应用程序更新的频率可能远高于从服务器获取数据的频率(例如,客户端每秒更新 60 次,服务器每秒接收 10 个数据包)。比方说,在服务器更新到来之前,对象实时改变了方向,还剩 5 帧。在客户端,对象将继续沿其当前轨迹移动,直到它从服务器接收到它改变方向的更新(即它不会在没有从服务器接收数据时停止),此时,客户端将校正对象的位置和速度。

您如何进行校正将决定动画的跳动程度。您可以立即将其快速移动到正确的位置,从而引起一点跳跃,但立即给出正确的位置,或者您可以改变它的速度,使其平滑过渡到该位置,不会引起跳跃,但具有在校正的同时位置稍微不准确。

在某些情况下,这些修正最终会变得非常大(例如,某人的连接非常糟糕、丢包、高延迟等)。那时你会遇到人们通常称之为在线游戏滞后的疯狂异常,比如当一个物体跳过很远的距离或移动得非常快以“ catch ”它应该在的位置时。始终保持 100% 同步是不可能的。您所能做的就是很好地猜测事物应该放在哪里。

这里有一些更详细的文章,祝你好运!

http://gmc.yoyogames.com/index.php?showtopic=415538 http://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php

关于html - WebSocket 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439203/

相关文章:

javascript - 使用复选框控制文本框禁用或自述文件行为

html - 为什么内联 div 的行为与内联 span 不同

javascript - 是Vue.js的内存泄漏吗?

websocket - 保持与 Socket.io 的连接

java - Dispatcher-servlet 无法映射到 websocket 请求

javascript - 如何防止移动设备上的图像缩放?

html - 使用 Bootstrap 创建一个包含图像的 div,该图像具有固定高度

javascript - 在 Canvas 上绘制超过 1 个是行不通的吗?

javascript - 使用 HTML5/Canvas/JavaScript 在浏览器中截屏

node.js - 如何在 Meteor 中使用 websocket?