事件总是在氮气中以相同的过程运行吗?

时间:2010-01-02 22:48:58

标签: erlang nitrogen

我正在Nitrogen, the Erlang web framework中使用event函数,在您收到回发时运行的网络模块中。

对于同一个Web客户端(即浏览器窗口或框架),event是否始终在同一进程中运行。

我记得至少有一个案例没有发生,但我无法重现。

2 个答案:

答案 0 :(得分:3)

不,氮气事件会在当前处理氮气的Web请求的任何过程中运行。

由于Nitrogen是一个非常异步的框架,因此您可能有多个进程异步处理同一浏览器窗口或框架的多个事件。这意味着您可以通过单独的流程处理不同的事件。

答案 1 :(得分:1)

嘿伙计们,我发现了氮的过程注册表: nprocreg
当您检查应用程序文件夹( $ NITROGEN_INSTALL_DIR / apps / nprocreg )时。

在此应用程序中,即使跨多台计算机,也可以在多个氮应用程序服务器上生成进程。要试验这一点,请在两个不同的主机上启动2个erlang节点。 ping它们以便它们连接起来。 (net_adm:ping(?OTHER_NODE))。现在,在两个erlang节点上启动氮气。实际上你可以先启动氮气,然后ping两个节点
确保两个氮节点使用长名称,即LAN上的[NAME] @IP_ADDRESS。

现在,在LAN上的第三台计算机上,创建一个DNS(名称服务器)。将相同的名称映射到运行氮应用程序的两个节点的两个不同IP地址上。配置两台计算机runnind nitrogen以确保它们指向DNS服务的DNS IP地址(实际上为LAN中的所有计算机执行此操作)。
当您从局域网中的多台计算机请求页面(位于两个氮应用程序的doc根目录中)时,您会发现,使用浏览器中的映射名称,您会看到DNS服务器执行某种加载平衡。
现在,确保您要求的页面可以显示来自界面的氮气服务器。此页面必须有一个按钮,该按钮会生成wf:flash(wf:f("Some statement on the interface",[]))的事件 现在,请在两台不同的计算机上请求此页面,并记下每台计算机的供应位置。接下来,转到一个氮气服务器并停止它。
当你现在点击浏览器上的按钮时,它的页面就是我们刚刚放下的氮气服务器,它仍然有效。
这就是为什么,Rusty和朋友们发现如果氮气过程可以在更多氮气应用程序中注册,当在负载均衡器后面运行时,事件可以被发送到群集中的任何氮气应用程序。
当然,如果您确保不同计算机上的两个应用程序具有相同的页面,模块和路径配置,则此方法很有效。这是因为事件回调函数可能称为数据库API。
当您从linux或solaris上的终端挖掘谷歌时,可以看到使用DNS服务器进行负载平衡的示例:

dig www.google.com
您将看到名称服务器具有映射到多个Ip地址的相同名称。这可确保跨域的可用性并确保某种负载平衡
/joshmuza@gmail.com