我了解 Node 的异步本质和异步编程概念,我已经这样做很长时间了。但我现在的情况是,如果您愿意的话,我需要同时发出请求来检查“同步”的内容。让我解释一下:
- UserA 请求的资源不存在。
- 为“isProcessing”设置标志,让其他人知道资源正在创建。
- UserB 请求相同的资源,看到它正在处理,并等待它准备好(使用轮询 - 不要关注这一点,因为这部分按照我们想要的方式工作)
- [一堆繁重的异步内容恰好生成了资源]
- 资源已准备就绪,任何投票的人都会收到通知(就像我说的,这部分有效)
让我陷入困境的部分是“第 2 步”,我们设置了“isProcessing”标志。这是一个异步数据库操作 (mongo),当同时有 2 个以上请求传入时,该操作尚未完成。结果,多个请求尝试创建相同的资源。如果请求之间有足够的时间来进行数据库写入(约 5 毫秒),则问题就会消失,但“同时”请求则不会。
任何人都可以提供一些好的建议来解决这个问题吗?看来我需要以同步(线程阻塞)方式设置“isProcessing”标志。我知道文件系统具有同步操作 - 这是正确的方法吗?我们正在多核机器上使用 Node ,有一天它将扩展到云中。我们使用 pm2 跨多个核心分发我们的应用程序。任何建议将不胜感激。
最佳答案
您只需要获得正确的数据库访问权限即可。当你说
UPDATE MyLockTable SET IsProcessing = 1 WHERE IsProcessing = 0
如果 IsProcessing 已设置为 1,则修改 0 行。否则,修改 1 行。这样您就可以区分这两种情况并只开始一次繁重的工作。
关于multithreading - Nodejs 请求之间的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127544/