我遇到Node.js中的竞争条件,如下所示:

  • 请求A到达,读取会话 .

  • 请求B到达,读取会话 .

  • 请求B在响应结束时修改会话 .

  • 请求A写入会话 . B的修改丢失了 .

有什么方法可以解决这个问题?我正在使用Connect与 session 中间件和 connect-mongo 中间件将我的会话存储在MongoDb中 . 我更倾向于使用现有的解决方案,因为在涉及并发问题时,我不是最有经验的程序员 .

对我来说最重要的是,解决方案必须超越一个流程 . 我已经研究了各种信号量/互斥量的可能性,但它们似乎都没有扩展 .

对于那些建议我编写我的客户端代码围绕这个问题的人 - 围绕竞争条件进行编码一直是我的M.O.直到现在,但这导致我的代码很笨拙并容易破解 .