跟风一下..
一个模仿 Rails 的 Erlang Web 框架。
官网上的介绍:
PS: 基于 Erlang 带来的优点,坛里搜搜就有,这里就不一一说了。
Chicago Boss 主要由以下七个部分组成:
BossDb
:对数据库操作,模仿 AR Models
: 定义数据模型ModelNew
: 模型事件监听WebController
: 控制器BossMq
: 内建的消息队列session
template
模型
在 CB 里定义模型是非常简单的,创建 src/model/article.erl
:
%% src/model/article.erl
-module(article, [Id, Title]).
-compile(export_all).
运行 ./init-dev.sh
,Chicago Boss 会启动服务,并送你一个 console,免费的
在命令行里键入:
Article = article:new('id', "This is a title").
{ok, SavedArticle} = Article:save().
SavedArticle:title().
ok.到此结束
PS: Chicago Boss 会对 src/model/*.erl 进行特殊处理,所以不是操作数据库的模型不能放到里面。
服务器別关了,下面轮到控制器...
控制器
创建 src/controller/example_hello_controller.erl
:
-module(example_hello_controller, [Req]).
-compile([export_all]).
index('GET', []) ->
{output, "Hello, world."}.
打开 http://0.0.0.08003/hello/index:
我要输出 html!
将 output
改成 ok
,创建 /src/view/hello/index.html
ok.到此结束
Template {ignore, "不说也罢"}.
模仿 Rails 注定干不过 Rails,CB 明白了这一点。所以他也在尽全力放大 Erlang 的优点。
long-poll
首先请让我吼一句: “实现得 TM 太完美了”
实际上,CB 并没有刻意对 long-poll 做额外的工作,而是 BossMq
带来的彩蛋。
BossMq
主要有两个方法 push/pull
。一个异步一个同步,也就是说 pull
会堵塞进程。性质跟 long-pull 非常类似,所以写起来非常简单
%% controller action
receive_chat('GET', []) ->
{ok, Timestamp, Messages} = boss_mq:pull("my-channel", now)
{output, Messages}.
%% Send Message
boss_mq:push("my-channel", <<"Secret Message">>)
客户端只要请求 /receive_chat
,boss_mq:pull
就会堵塞直到 boss_mq:push
。
BossNews
一个可插拔的模型事件监听模块,结合 model hook 和 mq 的产物。
场景:一个耗时的操作,比如在用户注册后发一封邮件。
通常做法是在 save hook 里面推到 MQ 来发送,但是在 CB 我们可以利用 BossNews 来完成这一需要。
来,骚年,打开你的 terminal
{ok, WatchId} = boss_news:watch("articles", fun(_, _) ->
error_logger:info_msg("Did you see that??~n") end).
创建一个新的 Article,控制台打印 "Did ...."
BN 支持 create/update/delete 事件,支持单个记录的某个字段监听,也支持动态取消监听。
boss_news:cancel_watch(WatchId).
Chicago Boss 是能吸引我动手写东西的 Erlang web framework,功能比不过大而全的 Rails,Erlang 是他最大的亮点,模板是他最大的硬伤,个人认为适合做小型站点、web app 或者 web server。 虽然用的人不多但是文档齐全,github 上目前还很活跃。而且官方说已经可以进入生产阶段。