栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在EC2环境中使用node

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在EC2环境中使用node

这最初是由问题提问者发布的。 一个mod在评论中要求他将其发布为答案,但未得到任何回应。因此,我清理了它并亲自发布。

查看代码时,您会注意到该

createServer
代码位于内部
db.open
。如果您将其撤消,它将不起作用。另外, 请勿关闭
数据库连接。否则,在第一次之后,数据库连接将不会再次打开。(当然,
db.open
是在外部声明的
createServer
。)我不知道为什么
createServer
在内部
db.open
。我想这可能与不打开太多数据库连接有关?

另外,我面临的一个问题是,当我通过SSH运行它时,即使我在后台运行服务器(例如

$ node server.js&
),在2.5小时后,服务器也会死机(虽然不是实例)。我不确定这是因为终端连接还是其他原因。

这是程序和代码

环境:EC2,AMS-Linux-AMI

目的:接收一个HTTP请求并将查询,IP和时间戳记录到MongoDB中。

脚步

1)创建实例(服务器)后,安装gcc。

$ yum install gcc-c++

2)下载Node.js文件并解压缩。(我使用的是2.6版。)

$ curl -O http://nodejs.org/dist/node-v0.2.6.tar.gz$ tar -xzf node-v0.2.6.tar.gz

我将解压缩的文件夹重命名为“ nodejs”

$ cd nodejs$ sudo ./configure --without-ssl$ sudo make$ sudo make install

make
需要一段时间。…之后,您可以尝试在nodejs.org中运行示例

3)安装MongoDB。我安装的版本是1.6.5,而不是1.7。

$ curl -O http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.5.tgz$ tar -xzf mongodb-linux-x86_64-1.6.5.tgz$ sudo mkdir /data/db/r01/

我将文件夹重命名为“ mongodb”

运行数据库进程:

$ ./mongodb/bin/mongod --dbpath /data/db/r01/

然后,如果您愿意,可以运行并尝试命令行。请参阅MongoDB的网站。

4)我建议您根据实例创建自己的AIM。需要20分钟。然后,重新创建安装并再次运行MongoDB。

5)安装

node-mongodb-native

$ curl -O https://download.github.com/christkv-node-mongodb-native-V0.8.1-91-g54525d8.tar.gz$ tar -xzf christkv-node-mongodb-native-V0.8.1-91-g54525d8.tar.gz

我将文件夹重命名为

node-mongodb-native

$ cd node-mongodb-native$ make

6)这是服务器的代码:

GLOBAL.DEBUG = true;global.inData = '';var http = require('http');sys = require("sys");var Db = require('./node-mongodb-native/lib/mongodb').Db,  Connection = require('./node-mongodb-native/lib/mongodb').Connection,  Server = require('./node-mongodb-native/lib/mongodb').Server,  BSON = require('./node-mongodb-native/lib/mongodb').BSONNative;var host = process.env['MONGO_NODE_DRIVER_HOST'] != null ? process.env['MONGO_NODE_DRIVER_HOST'] : 'localhost';var port = process.env['MONGO_NODE_DRIVER_PORT'] != null ? process.env['MONGO_NODE_DRIVER_PORT'] : Connection.DEFAULT_PORT;var db = new Db('test01', new Server(host, port, {}), {native_parser:true});db.open(function(err, db) {     http.createServer(function (req, res) {        res.writeHead(200, {'Content-Type': 'text/plain'});        global.inData = {'p':'', 'url':''};        // get IP address        var ipAddress = req.connection.remoteAddress;        global.inData.ip = ipAddress;        // date time        var d = new Date();        var ts = d.valueOf();        global.inData.ts = ts;        // get the http query        var qs = {};        qs = require('url').parse(req.url, true);        if (qs.query !== null) { for (var key in qs.query) {     if (key == 'p') {         global.inData.p = qs.query[key];     }     if (key == 'url') {         global.inData.url = qs.query[key];     } }        }        if (global.inData.p == '' && global.inData.url == '') { res.end("");        } else { db.collection('clickCount', function(err, collection) {      if (err) {         console.log('is error n' + err);     }     collection.insert({'p':global.inData.p,        'url':global.inData.url,       'ip':global.inData.ip,        'ts':global.inData.ts});     res.end("");     //db.close();  // DO NOT CLOSE THE ConNECTION });         }    }).listen(8080); });console.log('Server running at whatever host :8080');

这可能不是 完美的
代码,但可以运行。我仍然不习惯“嵌套”或LISP类型的编码样式。这就是为什么我作弊并习惯于

global.inData
传递数据的原因。:)

不要忘记将其放在

res.end("")
适当的位置(您认为HTTP请求调用应在此结束)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号