2014-09-10 70 views
1

我想在我的node.js应用程序中实现一个互斥体,这里是wiki http://en.wikipedia.org/wiki/Mutual_exclusion中的互斥体。在node.js中实现互斥体

该主题是否有任何现成的模块?如果没有,任何想法可以帮助我实现它?

+1

为什么你需要nodejs中的互斥量?它无论如何都在单线程中执行代码。或者你想跨进程互斥? – Andrey 2014-09-10 09:41:52

+1

http://stackoverflow.com/questions/5481675/node-js-and-mutexes – Andrey 2014-09-10 09:45:37

+0

对于文件I/O互斥锁例如从多个线程访问文件,您可以使用 https://www.npmjs.org/package/rwlock 正如本主题中所建议http://stackoverflow.com/questions/5481675/node-js-and-mutexes – xoryouyou 2014-09-10 09:52:12

回答

3

有很多方法可以做到这一点。两种简单的方法是通过Redis或Zookeeper服务器。 Node.js对它们都有很好的模块。

在Redis中,您可以使用WATCH + MULTI命令来实现锁定。在Zookeeper中,您可以创建临时节点。在这两种方式中,没有两个进程将同时执行关键操作。

我最近在node-ratelimiter模块中实现了Redis方法,该模块是我们生产应用程序的关键部分,我们需要确保没有两个进程在Redis中增加相同的值。有关详细信息,请参阅WATCHMULTI。代码实际上很容易理解和阅读。

对于Zookeeper示例,请参阅Locks Recipe。使用Zookeeper临时节点可以为分布式锁实现更复杂的逻辑。 Redis解决方案只是一种特殊情况,如果您不需要,Redis解决方案的效果非常好。

使用这两种方法,您可以为任何应用程序和任何逻辑实现互斥锁。