2014-09-10 68 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解決方案的效果非常好。

使用這兩種方法,您可以爲任何應用程序和任何邏輯實現互斥鎖。