【发布时间】:2016-06-17 15:03:29
【问题描述】:
我正在使用 node + redis,当我运行我的应用程序时遇到奇怪的问题,redis 客户端的连接事件会自动调用多次,如 redis.js 文件中所写。
下面是我的代码 Server.js:
var express=require('express');
var app=express();
var port=8000;
var path = require('path');
var logger=require('morgan');
var bodyParser = require('body-parser');
var router = express.Router();
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.get('/',function(req,res){
res.send({message:"Welcome to nodejs APIS"});
});
var redisObj=require('./redis.js');
app.use('/redischeck',redisObj);
app.listen(port,function(err,res){ if(err){ console.log("Server error");}else{console.log("Server running on port 8000");}});
redis.js
var express = require('express');
var router = express.Router();
var redis = require("redis");
var client = redis.createClient();
client.on('connect', function() {
console.log('connected'); // Prints multiple time in console
});
router.get('/', function(req, res) {
client.on("error", function (err) { console.log("Error " + err);});
client.set("foo", "bar", function (err, reply) {
client.quit();
res.json({status:'Success'});
});
});
module.exports=router;
我还使用“netstat -na |”交叉检查了这个问题。 grep 6379'。我观察到许多连接已创建,然后进入 TIME_WAIT 状态,这很奇怪,因为我只是在本地主机上运行我的应用程序,而没有任何人从另一端连接它。
我是不是在代码中做错了什么。
【问题讨论】:
-
Connect 将被多次调用,因为您在每次请求根路径后都会关闭连接。如果您删除
client.quit并将其移至服务器关闭时,您应该只会看到 1 个连接。 -
我评论了该行但仍然相同。此外,我是唯一访问节点应用程序的用户,一旦我运行应用程序而不通过 URL 导航,连接就会开始自行创建
-
即使没有活动,它是否会继续创建连接?您可能需要发布更多代码来调试它。
-
是的,一旦我使用“node server.js”运行应用程序,它就会一直创建连接而没有任何活动。我在上面复制的代码中只有两个文件。
-
我刚刚运行了你的代码,它只创建了一个连接。我注意到的唯一一件事是您的
client.on('error', ...)应该在您的路线之外声明。你是如何运行你的服务器的?你能在你的控制台中提供输出吗?
标签: javascript node.js redis