Node.js Redis Expess 开发环境配置及Session实现服务器间共享实例

  • Node.js 是一套用来编写非阻塞高性能网络服务器的JavaScript工具包。
  • Redis 是一个高性能的key-value数据库,我们可以用它来高速存取session。
  • Express 是一套流行的 Node.js 网站服务器框架。
首先下载所需的文件:

  1. 首先下载Windows版本的Node.js,到官网下载:http://nodejs.org/download 我的系统是Windows 8 x64,因此选择的 node-v0.10.0-x64.msi,运行安装程序安装到硬盘。
  2. 下载 Redis,到官网 http://redis.io/ 逛一圈发现,并没有Windows版本。原来Redis的Windows版本只有非官方版本,这样意为着不可靠吗?先看看谁发布的 -- Microsoft Open Technologies, Inc. (微软开放技术有限公司),有信心了吧。赶快去下载:https://github.com/MSOpenTech/redis。下载的是源代码,编译后的执行文件放在 /redis/bin/release/目录中的 redisbin.zip 和 redisbin64.zip 中。根据自己的操作系统选择下载解压到 D:\Redis中。(特别提醒:Windows版本仅适合于开发环境,并不适用于生产环境。)
  3. Express 官网网址是 http://expressjs.com,怎么下载安装呢?原来不需要我们下载。稍后讲怎么安装。
  4. 还缺什么?一个好用的文本编辑器。比如 Eclipse 都可以,我推荐一款小巧的代码编辑器,Sublime Text 2,看一下网站你就能感觉他的强大了。
下面介绍一个例子,使用express框架建立2个Node.js服务器,2个服务器之间,通过Redis保存Session,从而实现服务器的伸缩性。

D:\>npm install -g express             //npm 是node.js的模块管理工具,此时安装express到全局区域
D:\>express -s -e redis.test           //生成express工程文件目录,-s 代表使用session, -e 表示使用ejs模版
D:\>cd redis.test
D:\redis.test>



编辑自动生成的文件: package.json 第10-11行:
{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.1.0",
    "ejs": "*",
    "connect-redis": "*"
  }
}

在此目录中新建文件: settings.js
module.exports = {
	redisHost: '127.0.0.1',
	redisPort: 6379,
	redisPrefix: 'site_sess_',
	redisPass: '',
	redisTtl: 30, //seccend
	redisDb: 0,

	sessionSecret: 'mypassword',
	sessionTTL: 30
};

生成express网站架构:
D:\redis.test>npm install

编辑文件 app.js:
/**
 * Module dependencies.
 */


var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , settings = require('./settings')
  , RedisStore = require('connect-redis')(express);




var app = express();


app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({
    store: new RedisStore({
      host: settings.redisHost,
      port: settings.redisPort,
      prefix: settings.redisPrefix,
      ttl: settings.redisTtl,
      pass: settings.redisPass,
      db: settings.redisDb}),
    secret: settings.sessionSecret,
//  cookie: {domain: '.domain.com'},
  }));
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});


app.configure('development', function(){
  app.use(express.errorHandler());
});


app.get('/', routes.index);
app.get('/users', user.list);


app.get('/redisset',function(req,res){  
    req.session.user = 'George Chan';  
    res.send(req.session.user);  
})  
  
app.get('/redisget',function(req,res){  
    res.send("Username: " + req.session.user);  
})  


http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

保持后复制 app.js 为 app1.js,修改第21行:
  app.set('port', process.env.PORT || 3000);
  app.set('port', process.env.PORT || 3001);


下面开始运行测试:
  • 启动Redis服务:进入D:\Redis 因为没有建立配置文件 redis.conf ,因此直接运行redis-server.exe后,默认端口为 6379。
  • 启动Redis命令行:运行 redis-cli.exe 进入Redis的命令行状态,输入 monitor ,进入监控模式。
  • 启动第一个Node.js服务:进入DOS命令提示符窗口,输入:
D:\>cd \redis.test
D:\redis.test>node app
Express server listening on port 3000
  • 启动第二个Node.js服务:进入DOS命令提示符窗口,输入:
D:\>cd \redis.test
D:\redis.test>node app1
Express server listening on port 3001


下面通过浏览器,顺序访问以下网址:
http://127.0.0.1:3000/redisget                访问第一台服务器,此时显示:Username: undefined
http://127.0.0.1:3001/redisget                访问第二台服务器,此时也显示:Username: undefined
http://127.0.0.1:3001/redisset                访问第二台服务器,设置Session的变量user值。
然后再访问前2个网址,出现了什么? 访问后再等30秒后,再看看这2个网址是什么内容?


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值