【问题标题】:Connect event of redis client called mutiple times when using nodejs使用nodejs时多次调用redis客户端的连接事件
【发布时间】: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


【解决方案1】:

这是我的错误,我更改了位于 /etc/redis/redis.conf 的 redis.conf 文件中的超时值,因此 redis 连接在 60 秒内不会进入 TIME_WAIT 状态。

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2022-01-25
    相关资源
    最近更新 更多