2、其次,用cd命令转到功能包目录中包含源代码的目录。
3、最后,并创建helloworldnodepp的文件,用gedit编辑器进行编写即可。
一、编写Node.js原生扩展Node.js是一个强大的平台,理想状态下一切都都可以用javascript写成。然而,你可能还会用到许多遗留的库和系统,这样的话使用c++编写Node.JS扩展会是一个不错的注意。
以下所有例子的源代码可在node扩展示例中找到 。
编写Node.js C + +扩展很大程度上就像是写V8的扩展; Node.js增加了一些接口,但大部分时间你都是在使原始的V8数据类型和方法,为了理解以下的代码,你必须首先阅读V8引擎嵌入指南。
Javascript版本的Hello World
在讲解C++版本的例子之前,先让我们来看看在Node.js中用Javascript编写的等价模块是什么样子。这是一个最简单的Hello World,也不是通过HTTP,但它展示了node模块的结构,而其接口也和大多数C++扩展要提供的接口差不多:
HelloWorldJs = function() {
this.m_count = 0
}
HelloWorldJs.prototype.hello = function()
{
this.m_count++
return “Hello World”
}
exports.HelloWorldJs = HelloWorldJs
正如你所看到的,它使用prototype为HelloWorldJs类创建了一个新的方法。请注意,上述代码通过将HelloWorldJS添加到exports变量来暴露构造函数。
要在其他地方使用该模块,请使用如下代码:
var helloworld = require(‘helloworld_js’)
var hi = new helloworld.HelloWorldJs()
console.log(hi.hello())// prints “Hello World” to stdout
C++版本的Hello World
要开始编写C++扩展,首先要能够编译Node.js(请注意,我们使用的是Node.js 2.0版本)。本文所讲内容应该兼容所有未来的0.2.x版本。一旦编译安装完node,编译模块就不在需要额外的东西了。
完整的源代码可以在这里找到 。在使用Node.js或V8之前,我们需要包括相关的头文件:
#include <v8.h>
#include <node.h>
using namespace node
using namespace v8
在本例子中我直接使用了V8和node的命名空间,使代码更易于阅读。虽然这种用法和谷歌的自己的C++编程风格指南相悖,但由于你需要不停的使用V8定义的类型,所以目前为止的大多数node的扩展仍然使用了V8的命名空间。
接下来,声明HelloWorld类。它继承自node::ObjectWrap类 ,这个类提供了几个如引用计数、在V8内部传递contex等的实用功能。一般来说,所有对象应该继承ObjectWrap:
class HelloWorld: ObjectWrap
{
private:
int m_count
public:
声明类之后,我们定义了一个静态成员函数,用来初始化对象并将其导入Node.js提供的target对象中。设个函数基本上是告诉Node.js和V8你的类是如何创建的,和它将包含什么方法:
创建 Node.js 应用本地创建 Web 应用 app.js,具体代码如下:
var express = require("express")
var app = express()
var path = require("path")
app.get('/',function(req,res){
res.sendFile(path.join(__dirname+'/index.html'))
})
app.listen(80)
console.log("Express server listening on port %d in %s mode", 80, app.settings.env)
本地创建描述该应用的 package.json,该文件定义了应用所需要的各种模块和配置信息。具体代码如下:
{
"name": "node-demo",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "^4.11.0"
}
}
本地创建 index.html,作为 Web 应用的入口页面,具体代码如下:
Hello Friends, Welcome to c.163.com !
创建 Dockerfile
本地创建 Dockerfile,具体代码如下:
FROM hub.c.163.com/nce2/nodejs:0.12.2
COPY . /srv/www
WORKDIR /srv/www
RUN cnpm install -d
CMD ["node", "app.js"]
提交代码
将 app.js、package.json index.html 和 Dockerfile 共四个文件上传至你的 Github创建集群
1. 登录蜂巢控制台;
2. 点击左侧导航菜单的「集群管理」;
3. 点击集群列表左上角的「创建集群」按钮;
4. 基础镜像选择官方镜像中的 「nodejs」;
5. 源码管理中输入 Node.js 代码的 Git 地址。本示例中的 Git 地址详情请参见 Node.js 应用;
6. Dockerfile 中选择「自定义」,输入 Dockerfile 的路径;
7. 选择「使用」负载均衡;
8. 开始创建集群。
部署完毕
创建成功后,可在集群管理列表查看公网 IP 以及运行状态: