イベントは常に窒素で同じプロセスで実行されていますか?

StackOverflow https://stackoverflow.com/questions/1993164

  •  22-09-2019
  •  | 
  •  

質問

私は取っています event 機能します 窒素、Erlang Webフレームワーク, 、ポストバックを取得したときに実行されるWebモジュールで。

します event 同じWebクライアント(つまり、ブラウザウィンドウまたはフレーム)に対して常に同じプロセスで実行されます。

私はそれが起こらなかった少なくとも1つのケースを思い出しますが、私はそれを再現することはできません。

役に立ちましたか?

解決

いいえ、窒素イベントは、現在窒素のWeb要求を処理しているプロセスで実行されます。

窒素は非常に非同期フレームワークであるため、同じブラウザウィンドウまたはフレームの非同期に複数のイベントを処理する複数のプロセスがある場合があります。これは、別のイベントが別々のプロセスによって処理されることが非常にうまくいかないことを意味します。

他のヒント

やあみんな、私は窒素のプロセスレジストリを発見しました: nprocreg.
アプリフォルダーを確認すると( $ nitrogen_install_dir/apps/nprocreg ).

このアプリケーションでは、複数のマシンでも複数の窒素アプリサーバーにプロセスが生成される可能性があります。これを実験するには、2つの異なるホストで2つのerlangノードを開始します。それらが接続されるようにそれらをpingします。 (net_adm:ping(?OTHER_NODE))。ここで、両方のErlangノードで窒素を開始します。実際に最初に窒素を起動してから、2つのノードをpingすることができます
2つの窒素ノードが長い名前を使用していることを確認してください。

次に、LANの3番目のマシンで、DNS(名前サーバー)を作成します。窒素アプリケーションを実行している2つのノードの2つの異なるIPアドレスに同じ名前のマッピングを配置します。 2つのコンピューターを実行して、窒素を実行して、DNSサービスのDNS IPアドレスを指していることを確認します(実際にLANのすべてのコンピューターに対してこれを行います)。
LAN上のいくつかのコンピューターからページ(両方の窒素アプリのドキュメントルートに存在する)をリクエストすると、ブラウザのマッピング名を使用して、DNSサーバーが何らかのロードバランスを取得していることがわかります。
ここで、要求しているページに、どの窒素サーバーがインターフェイスから来るかを表示できることを確認してください。このページには、イベントを生成するボタンを言う必要があります wf:flash(wf:f("Some statement on the interface",[]))
次に、このページを2つの異なるコンピューターでリクエストし、それぞれがどこから提供されているかに注意してください。次に、1つの窒素サーバーに移動して停止します。
これで、ページを取得したブラウザのボタンをクリックしたとき、私たちが置いたばかりの窒素サーバーがまだ機能しますが、それでも機能します。
これが、Rustyと友人たちが、窒素プロセスをより多くの窒素アプリで登録できる場合、ロードバランサーの背後に実行されると、イベントがクラスター内の窒素アプリをやめることができることを発見した理由です。
もちろん、異なるマシン上の2つのアプリに同じページ、モジュール、パスの構成があることを確認すると、これはうまく機能します。これは、イベントコールバック関数がデータベースAPIを発言する可能性があるためです。
このようなLinuxまたはSolarisの端末からGoogleを「掘る」ときに、DNSサーバーを使用した負荷分散の例を見ることができます。

dig www.google.com
名前サーバーの名前がいくつかのIPアドレスにマッピングされていることがわかります。これにより、ドメイン全体の可用性が保証され、何らかの負荷分散が保証されます
/joshmuza@gmail.com

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top