我一直在查看氮计划,它应该是Erlang最成熟的Web开发框架.
Erlang作为一种语言,令人印象深刻.然而,关于氮,我不太热衷于使用Erlang的相当不常见的语法(除非你是PROLOG中的本地语言)来构建UI.
与其他主流 Web框架(如Django或Rails)相比,您对它的体验是什么?
在我最近询问有关mnesia碎片的问题的解决方案之后,我仍然面临许多挑战.请考虑以下场景(我要问的问题基于以下内容):
您有一个数据驱动的企业应用程序,该应用程序应该
在企业内高度可用.如果内部信息源因任何原因而关闭,
企业应用程序必须切换到从异地(远程)恢复中心 获取数据
.您决定将数据库复制到企业内的两个节点
(称为DB侧A和DB侧B).这两个
硬件在单独的硬件上运行,但与快速以太网或光纤链路相连.
从逻辑上讲,您可以在这
两个Mnesia DB 之间创建某种隧道或安全通信.两个(A和B)应该具有相同的数据副本并且
始终保持同步.现在,同时,恢复中心也必须具有相同的数据副本并且
始终同步,以防因本地数据访问因攻击
或硬件故障而中断.因此,相同的数据库架构必须在3个复制
位点(A面,B面和恢复中心).
现在,在企业内,应用程序中间件能够在数据库站点之间切换数据请求.如果A已关闭,那么在应用程序未实现的情况下,请求将重新路由到数据库B,依此类推.中间件层可以配置为执行负载平衡(请求多路复用)或使用故障转移技术灵活.
进一步分析:
At Database/Schema creation time, all involved Nodes must be up and running
Mnesia. To achieve this, you create say: 'db_side_A@domain.com',
'db_side_B@domain.com' and finally, 'db_recovery_center@domain.com'
现在,在创建表时,您可能希望将mnesia表分段.所以你决定以下参数:
n_disc_only_copies =:= number of nodes involved in the pool =:= 3 Reason: You are following the …
该氮项目的网页声明为雅司病,受Mochiweb和inets,但与这些网络服务器是要执行的最好等于支持?即大规模的应用程序,主要是动态内容与氮+一个Web服务器组合将能够处理最大的用户负载?
在氮框架中是否有内置函数来获取Peer IP地址?如果没有,有没有办法获得正在向Nitrogen App请求的peer的IP地址
我有一个#upload元素和一个#textarea元素.当用户按下按钮上传文件时,#textarea也会被发布,我可以在finish_upload_even/4函数中使用wf:q/1接收它.这一切都很好但我想将#validator连接到#textarea并且找不到要使用的TriggerId.我误解了某些东西还是这个功能不明显?也许现在甚至不可能?
BR,丹尼尔
我有一个基于氮的网络应用程序的登录页面.如果用户身份验证失败,我会向用户发送一条消息让他们知道.但是,如果用户继续提供错误的凭据,则这些闪存消息会不断增加.有没有办法在发布新消息之前先清除闪烁的消息?
我是ejabberd的全新人物.我已经下载了windows和linux(Ubuntu)的安装.在网络的某个地方,我看过如何安装和设置它的演示,但安装被配置为"演示".我有pidgin XMPP客户端,现在我在设置ejabberd时遇到了问题.
另一个问题是我试图在后端使用Nitrogen的彗星池和erlang ETS表开发聊天系统(由于现在嵌入在ets表中的故障转移机制),即
ets:give_away/3 [it gives my chat engines fault tolerance, thanks to the guys
who maintain the virtual machine who saw how useful this is]
Please point me in the right direction to get ejabberd up and running.
On the processOne Website and the ejabberd documentation i have still
failed to start it well. Please help
-module (blah).
-compile(export_all).
-include_lib("nitrogen_core/include/wf.hrl").
main() -> #template { file="./site/templates/bare.html" }.
title() -> "Welcome to Nitrogen".
body() ->
#button { id=calcButton, text="Click"}.
imafunction(Param1, Param2) -> %something here%.
Run Code Online (Sandbox Code Playgroud)
如何通过单击按钮调用imafunction(Param1,Param2)函数及其参数?
我的一个网站是使用氮气和牛仔服务器.我想记录每次访问网页,就像Apache使用access.log一样.最好的方法是什么?
某些Tuples
在Erlang中操作的函数会在操作后生成新元组的副本.在大多数情况下,程序不再对创建新元组的旧元组副本感兴趣.让我们看一个例子:
change(Position,Tuple1,NewValue) when size(Tuple1) > 10,Position < 10 -> NewTuple = erlang:setelement(Position, Tuple1, NewValue), %% at this point i don't want Tuple1 %% I want to destroy Tuple1 at this point ! %% how do i do it erlang:send(myprocess,NewTuple), ok.
在上面的示例中,我从现有元组创建一个新元组.如果我随后要这样做,我会想要破坏我自己的旧副本.我有一种感觉,编译器/运行时系统会自动执行此操作,但如果是这样,他们就不会给我们提供如下功能:erlang:garbage_collect/0
.我们肯定他们意识到我们可能需要隐式地管理我们的内存,可能它会使程序免于崩溃并找到通过代码的内存密集部分的方式.
我明白,在它中erlang shell
,它可能会让它忘记一个变量(假设他们的意思是破坏变量)使用f/0, f/1
.但是,似乎我不能在我的模块/功能中使用它.我还怀疑在变量名称前面放置一个下划线可能会加速运行时系统的破坏,即在我的代码中写入的一些内容:_Tuple1
to destroy Tuple1
.总之,问题是,如果我随后将从现有的元组创建元组,并且在每一步我想立即销毁旧副本(我自己),我该怎么做? *注意*我明白效率指南禁止这个,但是,如果我别无选择.....
伙计们帮忙,你的解决方案是什么?谢谢