2

コマンドラインで起動する基本的なサーバー側のErlangアプリ(まだ完全にOTPされていません)があります。ブラウザを窒素(バージョン2.0.4)のGUIとして使ったインタラクティブシステムにしたいと思います。一般的な計画は

  • 現在のモジュールをMODEL部分としてgen_serverに変換します。データを分析し、関心のあるデータの特定のプロパティを反映するイベントを生成します。
  • gen_event(モデルによって生成されたイベントを取得するため)とgen_server(GUIフロントエンドからのクエリを許可するため)の両方であるCONTROLLERモジュールを追加します
  • 窒素をビューとして使用し、コントローラーモジュールへの呼び出し(モデルにクエリを実行する)を通じて、関連するページをAjax機能で更新します。

私が見る限り、モデル、ビュー、コントローラーの3つの子を持つ一般的なアプリケーションスーパーバイザーが必要です。次に、OTP通信モードにマップされたAPIを介して相互に通信します。

そして、これは私が立ち往生しているところです:私はこれらすべてを窒素ディレクトリツリーに入れるべきですか?新しいアプリディレクトリ構造を設定し、その下に3つのコンポーネント(窒素を含む)を含める必要がありますか?アプリスーパーバイザーの子としてNitrogenサーバーを起動するには、正確に何をする必要がありますか(Nitrogen起動スクリプトは予想よりもかなり複雑に見えます)?ErlangとOTPinActionを使い始めましたが、まだ完了していません。そして、明後日、システムのデモを行う必要があります;)

コマンドラインで「start.sh」と入力し、ブラウザーを使用して窒素経由でアプリに接続します。

4

3 に答える 3

1

少し前に、 yawsWebサーバーでのライブラリとしての窒素の使用に関するこのブログ投稿を見つけました。Yawsには、内部で多くの機能(組み込みモードなど)があり、OTP準拠のアプリケーションに完全に適合します。

完全な答えではありませんが、役立つかもしれない情報を願っています。

于 2011-05-11T11:51:08.957 に答える
0

Nitrogenアプリの構築方法のため、アプリケーションをそれに緊密に結合して構築しないでください。むしろ、アプリケーションを構築し、窒素にAPIを提供します(窒素イベントなどから呼び出すAPI)。

次に、アプリをOTPファイルシステムとしてパッケージ化し、窒素のアプリフォルダーに配置します。窒素が生成または開始するとebin、アプリディレクトリにある限りアプリのパスが追加されます。

例:モデルとコントローラーはアプリケーション内に実装されます。次に、アプリケーションで、窒素ページから直接呼び出す関数呼び出し(gen_serverの動作である可能性があります)を公開します。美しさは、これらすべてが同じコードパスにあることです。

何をすべきか:あなたquickstart.sh はそれがerlangVMを開始するポイントで、窒素スクリプトを見ます。

echo "Inets(http:// localhost:8000)で窒素を開始しています..."
erl \
    -YOUR_NODE_NAME_HEREに名前を付けます\
    -pa ./ebin ../apps/*/ebin ../apps/*/include \
    -env ERL_FULLSWEEP_AFTER 10 \
    -eval "application:start(nprocreg)" \
    -eval "application:start(quickstart)" \
    -eval "application:start(YOUR_APPLICATION)"

アプリケーションがOTPに似ていない場合は、ビームファイルを配置する「ebin」というフォルダを作成します。「my_app-1.0」というフォルダを作成し、このebinフォルダをそのフォルダに貼り付けます。

  窒素-|-/apps-|-/my_app-1.0-|-/ ebin
            |-/ doc
            |-/ rel
            |-/サポート
            |-/クイックスタート

ビームファイルへのフルパスは次のようになります

"$ NITROGEN / apps / my_app-1.0 / ebin"
。Nitrogenが起動するたびに、すべてのビームファイルがコードパスに追加されます。次に、コードに自分のものを開始する関数がある場合は、次のように言いますmain_server:start()quickstart.sh見つかったものをこのように表示するように変更し$NITROGEN/Quickstart/quickstart.shます。

echo "Inets(http:// localhost:8000)で窒素を開始しています..."
erl \
    -YOUR_NODE_NAME_HEREに名前を付けます\
    -pa ./ebin ../apps/*/ebin ../apps/*/include \
    -setcookie YOUR_FUNNY_COOKIE_HERE \
    -mnesia dir'"PATH / TO / MNESIA / DIRECTORY"' \
    -env ERL_FULLSWEEP_AFTER 10 \
    -eval "application:start(nprocreg)" \
    -eval "application:start(quickstart)" \
    -eval "main_server:start()"

これの利点は、ビューをerlyweberlang webなどに変更した場合、モデルやコントローラーを変更する必要がなく、任意のビュータイプライブラリから呼び出すことができるAPIを公開することです。

于 2011-05-17T09:52:52.357 に答える
0

このブログ投稿 http://rshestakov.wordpress.com/2012/12/30/how-to-install-nitrogen/で説明されている手順を試すことができます

アプリケーションに依存関係ライブラリとして窒素を追加する方法を説明します

于 2013-01-13T13:27:18.350 に答える