我们在网页游戏中有一个按钮供用户收集奖励。应该只单击一次,在收到请求后,我们会将其标记为在 DB 中收集。
我们已经阻止了客户端中的按钮重复点击。但是,如果人们在短时间内将包裹多次重新发送到我们的服务器,那将无济于事。
我想要的是一种从服务器端阻止它的方法。
我们在服务器端使用 Playframework 2 (2.0.3-RC2),到目前为止它是无状态的,我很想像这样使用 Set 来保护:
if processingSet has userId then BadRequest
else put userId in processingSet and handle request
after that remove userId from that Set
但是后来我不得不面对像更新Scala集合线程安全的问题,并且一旦我们在负载平衡后面有多个服务器,仍然无法阻止用户。
我正在考虑的一种可能性是在 DB 中有一个表来代替上面的 processingSet,但这会导致每个请求 1+ DB 操作,有没有更好的解决方案~?
谢谢~