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

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

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

第 6 步.                添加新功能计算斐波纳契数可能很有趣,但是时候向框架添加一些新功能了。
随着您的 SaaS 项目不断变成一个完整的生产系统,您需要能够通过 Web 界面和通过 API 访问许多功能。这些功能中的大多数将采用了相同的基本模式:
  • 最终用户发起一个 Web 或 API 请求。
  • 控制服务器解释命令并将它发送到一个代理。
  • 代理运行该命令。
  • 代理返回数据。
  • 控制服务器呈现数据。
通过添加一个简单的往返传输特性来突出该框架的灵活性,您的自定义实现将采用类似的模式。
演示仪表板缺少的一个明显特性是远程控制代理的能力,例如断开代理。很容易在 Web 界面中添加断开(drop)链接。
在 /public/index.js 的大约第 40 行的位置,找到服务器添加到表中的何处:
1
str += "<tr><td>" + name + "</td>";




将该行更改为:
1
2
str += "<tr><td>" + name + " <a href='#!' onclick='disconnectMachine(\"" +
name + "\")'>drop</a></td>";




这会导致该表为每个注册的代理添加一个 drop 链接。然后,客户端需要将一个服务器命令连接到该链接。
在 index.js 末尾处添加一个新功能:
1
2
3
function disconnectMachine(name) {
    socket.emit('server', {browserid: browserid, type: 'disconnect', data: name});
}




这会在用户单击 drop 链接时向服务器添加一条新的 socket.io 消息。
重新加载本地仪表板以查看效果。单击 drop 链接会在服务器的控制台输出中产生 Unknown message type:                disconnect。这指示服务器已获得该消息,但不知道如何处理它。
要更新服务器,可以在 lib/messageHandler.js 的 export.handle 函数(在第 52                行左右)添加一个新案例:
1
2
3
4
case "disconnect":
    var serverName = msg.data;
    io.sockets.emit(serverName, {type: "disconnect"});
    break;




添加的这个案例会导致服务器将一条 disconnect 消息传递到合适的代理。
重新加载本地服务器 (node app port)。现在单击 drop 链接,会在代理上生成 Unknown                    message type: disconnect 消息,而不是在服务器上生成。该消息现在会传输到代理。
作为最后一步,在 /agent/agent.js 中添加代理功能作为一个新案例,添加在大约第 76 行的位置:
1
2
3
4
case "disconnect":
    console.log("Exiting by request");
    process.exit(1);
    break;




重新加载代理 (node app http://localhost:port) 并单击浏览器中的                    drop 链接。现在它将触发代理断开自身。
在某些情况下,您需要实现用于往返传输的额外消息,从代理传回到浏览器。但是,在这种情况下,断开代理会触发 socket.io                向控制服务器告知断开的代理。服务器已提供了处理函数,在代理连接或断开时刷新仪表板代理列表。所以服务器在代理丢弃时会获得该消息 — 无需额外的消息。
现在仪表板有一个新特性,您只需要几分钟就可以实现它。
返回列表