1

我正在讨论Nitrogen 中的event功能,Erlang web 框架,在一个 web 模块中,当你得到回发时运行。

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

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

4

2 回答 2

3

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

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

于 2010-01-03T04:39:24.930 回答
1

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

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

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

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

于 2010-10-23T15:01:50.430 回答