读/写并发我开发一个HTTP请求发送短信的API。我使用节点js和猫鼬。所以我有一个像多线程应用程序一样的问题。节点JS与猫鼬/ MongoDB的
事实是,当用户发送短信时,我会验证他已经发送到数据库(使用猫鼬)的短信数量,如果该数字没有超过限制,他的短信将被发送,短信数量他发送的是数据库中的增量(在模式中,他在小时,天,周和月中发送的短信数量有一个值)。但事实是,我在我的代码中使用了一个回调函数来读取值和增量值以及许多其他操作。
因此,问题(我认为)是,当用户发送请求非常快时,服务器不同的回调读取相同数量的短信发送,授权用户发送短信,增加和保存相同的值,以便计数的短信是错误的。
在一个访问变量的多线程应用程序中,解决方案将阻止其他线程在实际线程完成所有工作之前读取一个变量。
随着节点的js事件系统,并获得MongoDB中的数据我只是不知道如何解决我的问题。
预先感谢您的答案。
PS:我不知道解决方案,但它会很好,如果它也适用于允许节点js使用多核的群集。
您可以将消息添加到队列中,并且仅在处理完前一个消息后才处理下一个消息。 – Cristy
此外,请阅读:https://docs.mongodb.com/manual/faq/concurrency/#what-type-of-locking-does-mongodb-use – Cristy