在我工作的小项目中,客户端可以通过点击网页中的按钮来执行操作。通过单击这些按钮,他可以触发对服务器有影响的事件。我想禁止客户端过于频繁地触发事件(例如,他只能在自上次触发后5分钟后触发)。
只有已注册的客户端才能触发事件,这意味着每个客户端都有会话ID和数据库中的条目。我在限制客户端操作时所做的是在触发事件时更新数据库状态,并在下次调用时检查相同的状态。
流程示例:客户点击按钮 - >呼叫服务器 - >检查数据库中客户端的状态 - > IF状态为0触发事件,将状态更新为1并启动定时器 - 如果IF状态为1则不执行任何操作。
我目前正面临三个问题。
无法足够快地限制客户端操作
如果客户端在呼叫到达服务器时点击过快,则数据库状态仍为0.这允许在更新数据库状态之前多次调用triger事件。在超快速点击的最坏情况下,大约有6个事件被触发"一次"。
我认为我可以限制客户端的客户端操作,至少可以补偿安全的服务器限制延迟。但是我不确定这是否100%安全,因为我听说客户端不值得信任。即使通过那么小的时间间隔来信任他也是危险的,不是吗?
不确定我应该如何跟踪多个玩家触发计时器
在某个客户端触发事件后,我启动服务器端计时器,完成后将客户端触发状态更新回0,这将允许他再次触发事件。代码示例如下:
function ControlEventTrigger (user_id,time) {
var timer = setInterval(function() {
if(time == 0) {
UpdateDatabaseState(user_id);
clearInterval(timer);
}
time--;
},1000);
}
这是处理多个客户端的好方法吗?
向客户显示下一次可能触发的时间,即使客户重新加载页面
我目前能够通过从服务器端返回变量 time 来用于跟踪服务器端事件,从而告知客户端他可以触发新事件的剩余时间。计时器,在这种情况下,跟踪客户端计时器。当事件触发发生时,我返回一次该值。两个计时器几乎在同一时间开始,在客户端,他可以看到计时器随着时间的推移而减少。 (两个计时器之间的延迟很小)。
我还希望获得时间,直到下一个事件触发,即使用户重新加载页面。就像现在一样,当用户重新加载页面时,我无法访问剩下的时间,直到下一个事件触发。我想我会以某种方式需要访问服务器计时器功能并获取该特定时刻的用户时间值并返回它?
通信客户端 - 服务器是基于ajax的。如果需要,我可以给予更多澄清。谢谢。