我正在构建一个Web应用程序,它使用类似前端库的反应,并将视图websockets与节点后端进行通信。
作为应用程序的一部分,我正在尝试开发一个像组件一样的法术力吧。单击按钮需要花费法力值,并且随着时间的推移法力值会重新填充。如果没有足够的法术力,用户就无法点击该按钮。
我的问题是,如何将法力栏与后端同步?我需要后端来跟踪用户的法力,所以用户无论如何都无法绕过前端并发送一个帧,但我也不希望后端发送会导致任何延迟前端“可点击”信号
这让我相信,实现这一目标的最佳方法是让前端和后端分别跟踪法力值,但我觉得随着时间的推移会有轻微的差异可能导致两者非常不合适随着时间的推移彼此同步。
答案 0 :(得分:1)
跟踪玩家在后端的法力值。这是你的记录系统。
同时跟踪前端球员的法术力,包括随时间的退役参数。每当客户端和服务器通信时,服务器的响应应该包括对游戏状态的任何更新,包括法术力。这应该可以纠正再生算法中随时间发生的任何漂移。
这在gamedev stackexchange上得到了相当好的回答: https://gamedev.stackexchange.com/questions/84402/mmo-client-server-architecture-nosql
答案 1 :(得分:0)
我建议不要联系服务器。
在客户端跟踪法术力,并且只有在有足够的法术力时才允许用户点击按钮。如果这是某种游戏应用程序,而其他用户需要能够查看您拥有多少法术力,那么只需将其发送到服务器每次更新。
例如:
Client Server
user clicks button
user has no mana -------> update server with mana=0
nothing happens
mana increases -------> update server with mana=20
user clicks button
mana is spent -------> update server with mana=5
perform button action ----> update server action performed
您无需等待服务器,但仍在使用当前信息进行更新
至于安全/游戏黑客问题,您需要研究保护JavaScript游戏的方法:Prevent Javascript games tweaking/hacking