我有一个Erlang / OTP应用程序,它可以执行一些业务逻辑。它是用Erlang编写的,主要用于容错,因为我可以轻松地重启系统中一个崩溃的组件(高正常运行时间是最重要的要求)。 它的每个组件都进行某种特定的“并行”计算。
作为一个工作周期的结果,应用程序生成一个值列表。让我们称这个Erlang / OTP应用程序为“后端”。
此Erlang / OTP应用程序还将使用PostgreSQL服务器将结果存储在持久存储中,并存储其计算所需的其他元信息(尚未实现)。
接下来我需要为这个Erlang / OTP应用程序添加一个前端 - 一个简单的基于Web的解决方案,可以为Web用户提供服务:接受他/她的计算请求,请后端做计算并让用户从后端返回结果。
没有可扩展性要求,我认为每天最大用户数不能超过1000个。
所以我现在的任务是为我的后端Erlang / OTP应用程序实现一个通用的前端(常见的意思是我有一个典型的用例:访问该站点,注册,登录,使用该应用程序,获取一个漂亮的ajax'y看起来网页的结果,退出)。
一方面,我知道代码重用可以节省很多时间:例如使用Ruby on Rails,我可以免费获得用户身份验证,密码存储,ajax接口和许多其他东西。
另一方面,我对设计一个包含Erlang / OTP + PostgreSQL数据库服务器后端和Web框架(RoR,Django等)作为前端的应用程序一无所知。
我脑子里浮现出许多问题:Erlang / OTP和Web框架是否应该使用相同的PostgreSQL数据库来共享结果?将计算请求从Web框架发送到Erlang / OTP应用程序并将其取回的最佳方法是什么?我如何监督PostgreSQL服务器 - 它不受OTP容错的保护?
一般来说,我有一些异构软件组件,我想从它们构建一个工作系统('主要'组件是Erlang / OTP应用程序)。
我应该从这个任务开始?你能给我任何建议或提示要阅读的资源吗?
P.S。我试过阅读this并按照链接进行操作,但不太了解。
UPD:我知道Chicago Boss和其他Erlang网络框架确实存在,但我怀疑他们中的任何一个都有如此成熟的环境,充满活力的社区以及不同插件和库的巨大变化例如Ruby on Rails,Django或任何基于PHP的MVC框架。对?
UPD2:也许我必须更深入地阐述这一点:我还需要前端尽可能保持可维护性。在Erlang中执行它意味着我可能在找到合适的开发人员维护它时遇到问题;在RoR,Django等中进行操作意味着我可以轻松找到维持前端并增长的工作力量。
答案 0 :(得分:4)
首先,这里有一个Erlang PostGreySQL客户端: https://github.com/wg/epgsql 。另一件事是你可能想看看 ZOTONIC 。它是用Erlang编写的CMS,但它也是一个Web框架。它的一个特点是它已经很好地集成了PostGreySQL数据库,因此Zotoniuc背后的所有Erlang应用程序都将从中受益。在开发MVC或事件驱动的Web应用程序时非常好。
另外,您可以查看 Nitrogen Web Framework 和 Chicago Boss ,它们也是Erlang Web应用的Web框架。我亲自使用氮气,雅司和Mnesia开发了Erlang网络应用程序。一个非常好的优点是,您可以在此技术堆栈后面拥有多个Erlang应用程序。使用 Appmods 和 dynamic Content Serving ability (所以 RESTFUL 向网络服务器yaws我可以向您保证)它使我们的JavaScript驱动前端Web应用程序具有如此惊人的简洁性和美感,从一系列Erlang应用程序中提供服务。
如果你想拥有一个快速的Web前端,具有类似Ajaxy / HTML5的功能,那么快点,快点! Nitrogen Web Framework 抓住你自己。由于您已经是Erlang程序员,因此对您来说这将是如此之快。使用模板,您可以编写HTML4.X / HTML5模板,或使用 Web page Maker/Studio Software 为您创建模板。然后,您将显示氮气进入的位置,使用动态生成的 JQuery 您的Erlang代码产生的代码将Erlang后端绑定到那些不错的页面上。
您会发现文档非常简单。氮只是Erlang Records的集合,每个记录代表一个HTML标记。其他记录用于定义将POST回Erlang应用程序的效果和事件。在氮气中开发Web漂亮的界面是如此之快。事实上,使用动态生成的 JQuery 代码,您可以将自己的JavaScript编写到模板中以配合整个功能,例如,使用另一个JavaScript库,如 {{3} } ,或 EXT JS 或 MooTools 。在模板中,您将指出氮气应该呈现动态生成的HTML元素以及JQuery的位置,这将是#Aax; AJaxically"按照这些要素行事。在这种情况下,模板仅仅意味着HTML页面。
请记住成为其邮件列表的成员以寻求更多帮助,并在StackOverflow上继续询问更多问题。欢迎来到Erlang Web Development的世界。您可能感兴趣的几个链接(
prototype js ,
IEEE Paper on Web Development in Erlang ,
Erlang Web Framework ,
erlydtl - Erlang Django like Templating Implementation
)成功!
答案 1 :(得分:1)
您可以使用任何可用的web framework在erlang中实现您的前端。使用erlang RPC在单独的erlang节点中运行前端和后端,以便在它们之间进行通信。