首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Node.js 为 Bluemix 和 SoftLayer 构建一个敏捷 SaaS 框架(2)

使用 Node.js 为 Bluemix 和 SoftLayer 构建一个敏捷 SaaS 框架(2)

第 3 步.                探索框架架构尝试单击 SaaS 仪表板上的 Fibonacci 43! 按钮。此操作将会向在 Bluemix                上运行的控制服务器发送一条消息。控制服务器检查任何可用的代理机器。如果有一个代理可用,那么服务器就会将请求传递给代理供处理。代理计算第 43                个斐波纳契数,用它来表示一个典型的计算密集型操作。该命令是异步运行的,完成运行后将响应发送回服务器。服务器挑选消息并将答案转发回浏览器。仪表板还显示了连接的代理、它们的当前状态、处理的请求数量,以及平均处理时间。
这个简单框架实现了 SaaS 应用程序通常需要的一个客户端/服务器/代理框架的主要组件。
在此架构中,代理机器处理计算密集型工作负载,比如记录处理或分析。该服务器提供了一个组合的用户和管理仪表板,服务器还提供了控制框架。在大型应用程序中,可以根据需要将服务器的各部分分开。
该框架使用了 Node.js 容器运行时来实现代理和服务器。Node.js socket.io 模块用于代理通信、服务器通信和浏览器消息传递。socket.io 通信通过                HTTPS 进行长轮询 (long-poll),所以即使 SoftLayer 和浏览器机器受防火墙保护,您也可以获得实时三方双向通信。这些机器只需连接到                Bluemix。
服务器和代理实现会记录基本的消息事件,这样,用户在单击该按钮时很容易看到整个框架中的活动。
第 4 步.                在本地开发Bluemix 和 SoftLayer 提供了灵活的托管功能,但远程系统很快会成为快速代码开发的瓶颈。幸运的是,此框架在您最喜欢的本地开发环境中的设置像 Bluemix                和 SoftLayer 上的初始设置一样简单,所有组件都可从同一个 PC 运行。双屏幕显示已足以看到所有信息。
设置步骤会因为您的操作系统和开发环境而稍有不同。

  • 下载并安装  。
  • 使用 npm 安装 express、socket.io 和 socket.io-client Node 模块。从 source                    文件夹的根目录下,运行:  npm install express socket.io socket.io-client
  • 要启动服务器,可以从 source 根文件夹运行 node app port。要启动代理,可以从                    source/agent 文件夹下运行 node agent http://localhost:port
  • 找到 http://localhost:port 来启动 Web 控制台。您可以看到包含一个已注册代理的熟悉的框架页面。单击该按钮。
Node 的一个不错的优势是,它只需一秒即可完成加载。在本地开发时,我打开了多个 shell:一个重新启动服务器,一个重新启动客户端,另一个将代码推送到                Bluemix。我可以在几秒钟内更新代码,停止和重新启动服务器,以难以置信的速度启用新特性。Node.js 拥有它的局限性,但开发速度不在此列。
第 5 步.                检查代码目前为止,您有很多机会来熟悉组成该框架的 3 个组件:代理、控制服务器和 Web                或移动仪表板。我们首先会详细看看代理,因为它最简单,而且是独立的。首先在您最喜爱的编辑器中打开 /agent/agent.js。
此细节对该框架的使用不是很重要。我只是想要指出该代理将会执行主要的工作。在 Node 中实现该代理只是出于方便之目的。在 agent.js                    中实现任何大型操作之前,建议熟悉一下 Node 的单线程模型的利弊(如果还不知道)。

您马上就会看到,agent.js 实现了两个函数:一个连接到控制服务器的代理消息传递程序和一个单独的 Fibonacci                分析器。像计算斐波纳契数这样的大型同步操作,一定会阻塞 Node 的同步处理路径,所以它在 agent.js                中是通过一个单独的命令参数来调用的。在代理收到一条计算斐波纳契数的消息时,Node 线程会启动另一个系统线程来执行实际处理,然后它会捕获输出。
在 agent.js 的大约第 70 行,可以看到一个 Agent got message 日志。这是该框架的消息部分。agent.js                向控制服务器注册,而控制服务器通过 socket.io 发送 JSON 数据命令。最后,在接近第 108 行的地方,可以看到                    socket.emit 命令,它将斐波纳契数的结果发送回控制服务器。
在根文件夹中的 app.js 中,可以看到控制服务器容器。如果查看 Bluemix 上的 Node.js                示例应用程序,您会觉得此部分看起来很熟悉。我保留了演示应用程序的一般框架,使得查看框架更改和共享来自演示应用程序的代码都变得很容易。app.js 源代码有一些句柄来在                Bluemix (non-dev) 上下文中执行 SSL。app.js 包含两个有趣的部分:
  • res.render('indexMain')
  • messageHandler.handle(msg)
lib/messageHandler.js 文件的结构类似于 agent.js 的后一部分,而且具有充分的理由。这些组件使用 socket.io 传递 JSON                消息,消息类型和有效工作负载在所有组件中是相同的。
在面向 Web 一端,indexMain.ejs 和关联的 /public/js/index.js 和 /public/stylesheets/main.css                提供了所有 Web 或移动仪表板功能。这部分的有趣之处是 index.js,它的结构类似于其他消息处理函数。
总体上讲,整个 SaaS 框架使用了大约 500 行代码就实现了,这有力地见证了这些平台执行快速的开发和原型设计项目的强大功能。
当前计算斐波纳契数的能力对一个出色的演示而言确实比较慢,您一定希望使用该框架做一些更有趣的事。
返回列表