在一个实时小程序中识别多个提交的正确答案--无需重复回到数据库中。

问题描述 投票:0回答:1

我正试图用Nodejs创建一个实时小游戏应用,但我对如何检查正确答案有不同的想法。由于问题是在实时环境中回答的,因此所有用户的提交都是在很短的时间内完成的(比如10-15秒)。

显然,我不希望回到数据库中检查提交的答案的正确性。这样会给数据库带来很大的压力。

目前我是在客户端本地检查答案检查,然后打到我的服务器上,传达用户的答案是否正确。这个过程会不会有安全隐患?目前我假设是这样,因为用户可以简单地通过设置isAnswerCorrect值为true来进行api请求--这将被发送到数据库。此外,由于答案在客户端短暂存在,它可能会暴露.此外,由于我对前端技术的理解有限,不安全因素可能看起来很琐碎。这样的话谁能好心的指出有什么可以安全的方式。

另外我随机的想法一直围绕着使用pub-sub azure服务总线(或kafka)或使用像redis这样的内存db.什么是更好的方法?

node.js database security
1个回答
0
投票

服务器应该决定答案是否正确,而不是客户端,否则如果有人黑了你的客户端,就会通知服务器他的答案一直正确。

我建议你把Q&As存储在一个专用的数据库中。你不需要在每次请求中频繁地访问你的数据库,只需要将Q&As的集合加载到缓存中(你的服务器内存),然后用它来响应用户的答案。将服务器中的Q&As集合用快速访问结构表示,就像一个从question-id到answer-idhashQ&A对象的映射,无论你如何表示你的答案,最好使用客户端请求使用的相同类型。

除非你要处理数百万个不同的问题,否则你应该能够在内存中加载所有的问题。如果随着时间的推移可能会增加新的问题,只需提供一种在数据库中搜索的方法,以防在你的缓存中不存在问题(然后将其加载到缓存中)。

如果你担心大量的请求负载到服务器上,有些峰值它无法正确处理,你可以使用Kafka作为背压补救措施来平衡请求处理。这可以通过在一个流式进程(KafkaConsumer)中处理请求来实现,这可以允许一些延迟,因为Kafka会将延迟的请求保存在队列中,以便以后处理(TopicPartition)。

© www.soinside.com 2019 - 2024. All rights reserved.