Erlang-China

erlang 中文社区

由 webmine 想到的 blah blah


如前所属,我对 erlang 前景的猜想大多集中在 web 上。继续我们的 erlang web 探险之旅。

虽说俺的 webmine 目前还没有办法在 erlang-china.org 上 lunch ,先上一张图吧。

web mine screen snap

但目前它已经进入了下一个 phase。v0.2 的 refactor 目标是:通过这个草创版本提炼出一个“HIWI”的应用框架。(HIWI,就是,high interactive web interface,要记得啊,这个象 AJAX 一样的 buzzword 是俺,jackyz,于 2007年5月9日首先正式明确提出的啊。哈哈)搞笑结束,言归正传。

理想的效果是这样。

扩展标准 ajax 模式,通过增加一个 keep alive 连接来传递 serverpush 的下行信息(eg,异步调用),而所有上行信息均通过“突发新开”的连接来完成(eg,同步调用),继续维持 web 应用一贯的发起新连接无组织无纪律的随意性(这样大家都比较自然嘛)。这个 serverpush 连接专门负责传递服务端的更新,而其他的“突发”连接则仍与标准 ajax 一样,完成获取界面之类的日常工作。这样,通过一个不大的开销(每个客户端消耗一个 keep alive 的 http 连接)就可以为整个客户端的 ajax 应用引入异步消息,提供 HIWI 所需要的双向连接能力。

更进一步,这个基础架构还要能支持更多的服务,就是说,所有这些服务的状态都通过这一条 keep alivie 的连接来下行。在搭建应用系统的时候,可以通过明确的接口来组装各个子服务,从而形成一个完整的系统。

呼,看看我简陋的“草创”版本,这还真貌似一个并不轻松的工作呢。


写了一个WebMine


五一放假,哪儿也没去,就着这个时间,学了下 Erlang,欠的账实在是太多了啊。

做了一个 WebMine ,创意源自 zhekoujun 的 webmine,基本上,可以认为是它的 Erlang Port 版。

无论如何,这也算是第一次用 Erlang 来做“严肃应用”,感慨颇多。

  • 语法的适应是痛苦的,前面用 Erlang 写后台服务,不适应啊,那叫一个苦,文档都被俺翻烂了,后面用 Javascript 写前端的时候,那可真叫流畅。
  • 错误的出现是低级的,客户端的代码都写完了,发现服务端存在一个低级无比的错误。如: N = Y * Width + X。它的反函数什么呢?就是我现在有 N 和 Width ,需要取 X 和 Y 怎么获得呢?嘿嘿,貌似很简单,不过,你还是想想吧。
  • Ajax更新DOM是缓慢的,之前玩 zhekouju 的那个 web mine,觉得挺慢,一看代码,这样的小游戏竟然还用上了数据库,主观上觉得,这肯定是数据啥的导致,没想到,自己写完 Erlang 的,一行数据也没用,跑起来竟然是一样的慢。打开任务管理器,咣当倒地,口吐白沫——丫 FireFox 自己占了 200 多M,一点击 cpu 就在 firefox 上狂跑,而 erl 只有 10M 不到,基本不占资源。合着是:服务器不累,累死浏览器啊。
  • 先写这么多,等服务器的 root 拿到了,配起来,show 给大家玩一玩。