如何使用氮气作为Erlang应用程序的GUI前端?
我有一个基本的服务器端Erlang应用程序(还没有完全OTP),我在命令行上启动它。我想把它变成一个交互式系统,使用浏览器作为带有氮的GUI(版本2.0.4)。总的计划是如何使用氮气作为Erlang应用程序的GUI前端?,erlang,otp,nitrogen,Erlang,Otp,Nitrogen,我有一个基本的服务器端Erlang应用程序(还没有完全OTP),我在命令行上启动它。我想把它变成一个交互式系统,使用浏览器作为带有氮的GUI(版本2.0.4)。总的计划是 将当前模块转换为gen_服务器作为模型部件;它分析数据并从中生成事件,这些事件反映了我感兴趣的数据的某些属性 添加一个控制器模块,它既是gen_事件(用于拾取模型生成的事件)又是gen_服务器(用于允许从GUI前端进行查询) 使用氮气作为视图,通过调用控制器模块(控制器模块反过来查询模型)使用Ajax工具更新相关页面 据我
- 将当前模块转换为gen_服务器作为模型部件;它分析数据并从中生成事件,这些事件反映了我感兴趣的数据的某些属性
- 添加一个控制器模块,它既是gen_事件(用于拾取模型生成的事件)又是gen_服务器(用于允许从GUI前端进行查询)
- 使用氮气作为视图,通过调用控制器模块(控制器模块反过来查询模型)使用Ajax工具更新相关页面
我要做的是在命令行上键入“start.sh”,然后使用浏览器通过氮气连接到应用程序。不久前,我发现这是关于在web服务器下使用氮气作为库的。 Yaws有很多功能(例如嵌入式模式),非常适合OTP兼容的应用程序
这不是一个完整的答案,但我希望这些信息可能会有所帮助。由于氮应用程序的构建方式,您不应该构建与之紧密耦合的应用程序。相反,您构建应用程序,为氮气提供API(您将从氮气事件e.t.c调用的API) 然后你将你的应用打包成一个OTP文件系统,把它放到氮的apps文件夹中。当氮气生成或启动时,它将添加应用程序的
ebin
路径,只要它们位于其应用程序目录中
例如:模型和控制器将在应用程序中实现。然后在应用程序中公开模块中的函数调用(可能是gen_服务器的行为),您可以直接从页面调用这些函数。美妙的是,所有这些都将在同一个代码路径中
操作方法:查看氮气quickstart.sh
脚本,在它启动erlang VM的地方
echo "Starting Nitrogen on Inets (http://localhost:8000)..."
erl \
-name 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)"
这样做的好处是,如果您碰巧更改了视图,例如,您将不需要对模型或控制器进行更改,而是可以从任何视图类型库调用公开的API。您可以尝试本博客文章中描述的步骤 它解释了如何将氮气作为依赖项库添加到应用程序中 Nitrogen--|--/apps --|--/my_app-1.0 --|--/ebin |--/doc |--/rel |--/support |--/Quickstart "$NITROGEN/apps/my_app-1.0/ebin" echo "Starting Nitrogen on Inets (http://localhost:8000)..." erl \ -name 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()"