2016-07-29 1 views
0

現在、私のnodejs/socket.ioサーバーは単一のスレッドで実行されますが、将来的に採用できるスケーラビリティ(例えばhere)を実現する方法があります。 しかし、これにより、サーバーのすべてのインスタンスがクラスタ化された別のプロセスで実行されるため、リソースはもはやシリアル化されず、並行性に関する問題が発生します。 鍵に基づいてnodejs/socket.ioサーバー上の異なるプロセスで特定のコードセグメントをシリアル化する方法はありますか?たとえば :nodejs/socket.ioスケーリングされたアプリケーションでリソースをシリアライズ

lock(key) 

/*make stuff*/ 

unlock(key) 

これは一例ですが、それは私が約束(私は方法がわからない)と同じタスクを実行できるかどうかを認識されます。

答えて

1

何かを処理している間、他のすべてのnodejsプロセスを魔法のように中断させる完全な一般的なクロスプロセスミューテックスはありません。

ただし、特定の問題を解決するために使用できるさまざまな種類のツールがあります。

#1ツールは、適切な設計を使用してプロセス間の競合状態を最小限に抑えることです。どのように正確にこれを行うかは、あなたが解決しようとしている問題を正確に特定することであるため、特定の問題を説明するともっと役立つ情報を提供することができます。これが行われる一般的な方法の1つは、共通のデータストアを使用し、データベース内のアトミック操作を使用するようにコードを設計することです。次に、データベースの機能自体を制御メカニズムとして使用します(マルチユーザーデータベースは、通常、非常にうまく処理できるように設計されています)。

それ以外にも、データベースロック、ファイルロックまたはその他のクロスプロセス通信メカニズムを使用できます。ここで

はRedisのを使用しての説明です:https://github.com/Perennials/mutex-node

、別のモジュール:implement mutex in node.js

は、ここで(実際にはカバーの下にファイルロックを使用しています)nodejsクロスプロセスミューテックスを提供していますモジュールです​​

これらのロック機構のいずれも確かに有望なインターフェースで包まれることができます。

関連する問題