Tag: node redis

node.js + socket.io:拍卖网站开发

我目前正在使用node.js和socket.io.But拍卖脚本,而使用PHP和MySQL开发网站。 在这里,我只使用node.js + socket.io拍卖出价过程。 在拍卖期间,该网站将有500-1000个login用户查看单个页面。 只有一个项目将在拍卖,它将在一天内出售一次。 我将从服务器向客户端广播(发射)倒数计时器。 在服务器端,我将使用setInterval(),recursionsetTimeout()1秒倒计时到拍卖结束时间。 除此之外,唯一发送的其他消息是当前的出价从单个客户端传递到服务器,然后广播给所有的客户端。 这样做是可靠的吗? 它将能够处理服务器上的使用情况? 在这里我已经testing了500个用户在浏览器中挂起计时器的意思。 Server.js var cluster = require('cluster'); var app = require('express')(); //var http = require('http'); var https = require('https'); var socket = require('socket.io'); var redis = require('redis'); var redisAdapter = require('socket.io-redis'); var request = require('request'); var fs = require('fs'); var options = { key: fs.readFileSync('keys/e1317_0f2c9_71565598d419e37e376ccef5c2827113.key'), […]

更好的方式来编写一个简单的节点redis循环(使用ioredis)?

所以,我还在用其他语言很久以前学习JS / Node的方法。 我有一个很小的微型服务,从一个redis频道读取,temp将它存储在一个工作频道中,完成工作,删除它,然后继续。 如果频道中有更多,则立即重新运行。 如果没有,它会设置一个超时,并在1秒内再次检查。 它工作正常…但超时轮询似乎并不是“正确”的方法来解决这个问题。 我还没有find很多有关使用BRPOPLPUSH来尝试阻止(与RPOPLPUSH)并在Node ….或其他选项中等待。 (Pub / Sub在这里不是一个选项…这是唯一的监听者,它可能并不总是在监听。) 以下是我正在做的简短的本质: var Redis = require('ioredis'); var redis = new Redis(); var redisLoop = function () { redis.rpoplpush('channel', 'channel-working').then(function (result) { if (result) { processJob(result); //do stuff //delete the item from the working channel, and check for another item redis.lrem('channel-working', 1, result).then(function (result) { […]

在NodeJS中使用redis创build唯一的哈希键

我为node.js使用node_redis客户端。 我有一个结构化的数据,我目前正试图存储在redis中。 每当我尝试将更多的键值添加到同一个集合,它会覆盖。 我正在追逐它几天,我发现我必须添加独特的成员,然后我可以根据他们添加数据。 我通过在用户级别定义唯一键来完成这一部分,但是我想用公司和用户名组合来创build散列键,以便它在云中运行时始终是唯一的。 数据在我的jsonMessage { "Company": "ABC", "Users": [ { "Username": "john@gmail.com", "Authenticated": false }, { "Username": "chris@gmail.com", "Authenticated": true }, { "Username": "shaun@hotmail.com", "Authenticated": true } ] } 我到目前为止所尝试的是: var message = JSON.parse(jsonMessage); message.Users.forEach(function(user,i){ redisClient.sadd("users", "user:" + i); redisClient.hmset("user:" + i, "Username", user.Username, "Authenticated", user.Authenticated); }); 我如何根据公司把我的数据。 我应该把我的公司,然后分别添加其用户,因为我有由多个公司组成的数据。 在redis中,公司和用户的确切关系应该是什么?

使用kue连接到redis总是创build一个到localhost的连接

我无法使用kue连接到Redis,我按照这篇文章 ,实际上我使用kue redis客户端创build连接,连接代码是这样的: var kue = require('kue'), redis = require('kue/node_modules/redis'); app.redisClient = redis.createClient('6379', 'remoteip',{}); app.redisClient.on('error', function (err) { console.log('Redis error encountered', err); }); app.redisClient.on('end', function() { console.log('Redis connection closed'); }); kue.redis.createClient = function() { console.log('client ——————',app.redisClient); return app.redisClient; }; 似乎Kue试图连接到本地的Redis(我没有安装),因为我得到这个exception: 错误:Redis连接到127.0.0.1:6379失败 – 连接ECONNREFUSED 我已经阅读了这篇文章 ,似乎问题已经在0.8版本中解决了,而且我使用了0.8.11:/,最后我还想通过使用redis nodejs覆盖客户端, 但是没有任何运气,因为我得到同样的错误。 任何帮助将不胜感激。 谢谢!

使用Redis缩放Socket.IO,然后缩放Redis本身

在使用Node.js和socket.io一段时间后,我明白如果我想让我的应用程序支持多达一百万个并发用户,那么我需要对它进行扩展,所以我开始使用Redis在套接字之间使用PUB/SUB消息,很多socket.io服务器实例,在同一台机器和其他机器上,但是我所有的socket.io服务器都与同一个Redis服务器一起工作。 所以这让我想..最重要的是什么? 所以我将需要更多的redis服务器和他们之间的规模? 我的观点是,他们将永远是顶级服务器的瓶颈。 我的问题是,是否可以扩展Redis? 如果是的话,我所有连接到不同socket.io服务器的套接字如何能够在Redis服务器之间进行PUB/SUB ? 非常感谢

什么时候事件监听器被附加到Node.js中?

我正在使用node-redis模块连接到redis。 所以,我附加了一个事件监听器来处理redis服务器连接无法build立的情况。 client = redis.createClient(6379, 'localhost') client.on('error',(err)=>{ console.log('redis connection refused') }) 这是没有侦听器的情况下发生的错误。 events.js:141 throw er; // Unhandled 'error' event ^ Error: Redis connection to localhost:6379 failed – connect ECONNREFUSED 127.0.0.1:6379 at Object.exports._errnoException (util.js:837:11) at exports._exceptionWithHostPort (util.js:860:20) at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1060:14) 现在我的问题是,这个事件监听器何时被附加到“客户端”。 连接事件监听器之前是否有可能引发连接拒绝错误?

在Express中更新cookie会话不会向浏览器注册

我已经build立了一个工作logintesting,如下所示: var express = require('express'); var fs = require('fs'); var http = require('http'); var path = require('path'); var routes = require('./routes/index.coffee'); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var User = require('./userdb.coffee'); var app = express(); var RedisStore = require('connect-redis')(express); passport.use(new LocalStrategy(function(username, password, done) { return User.findOne({ username: username }, function(err, user) { if […]

Redis连接从密切的事件去了

在我们的redisconfiguration中,我们设置了超时时间:7秒 在node_redis中,我们处理redis连接就绪和结束事件 client.on("ready", function() { logger.info("Connection Successfully Established to ", this.host, this.port); } client.on("end", function() { logger.fatal("Connection Terminated to ", this.host, this.port); } 示例日志 [2012-07-11 08:21:29.545] [致命]生产 – 连接终止于'xxx9''6399' [2012-07-11 08:21:29.803] [信息]生产 – 连接成功build立到'xxx9''6399' 但在某些情况下(很可能是redis在不通知客户端的情况下closures连接),我们看到命令队列堆积并且请求花费太多时间来获取响应[直到node-redis客户端能够感知closures事件]。 在所有这些情况下,返回命令callback,这个错误Redis connection gone from close event 。 即使经过如此多的等待。 看起来好像这不是一个问题,因为通常的结束事件没有被触发。 问题似乎与此相似 – http://code.google.com/p/redis/issues/detail?id=368 这是一个已知的事情发生在redis? 有没有一种方法可以指定执行命令[发送和接收应答]的执行不应超过阈值,并在这种情况下应答错误,而不是使客户端失速? 或者是有没有其他的方法来触发closures事件在这种情况下,如socket_timeout? 或者我们应该从我们的redis方面检查一些东西? 我们在debug级别监视了我们的redis日志,我们发现这个问题没有什么用处 当我们在debugging模式下运行node-redis时,我们显然能够看到客户端在请求堆积在命令队列中时停滞了。 我们logging了flush_on_error函数内的原因和队列长度 。 […]

redis.lush一些项目

在我的node.js脚本中,我有一个string数组,我想将这些stringLPUSH到一个Redis队列中。 我试过了: var redis = require('redis').createClient(); redis.lpush('queue', ['1', '2', '3']) 这会导致一个string被推送: redis 127.0.0.1:6379> lrange queue 0 -1 1) "1,2,3" Redis在LPUSH命令中支持多个值,我正在寻求使用这个function的帮助。 我不问如何遍历我的数组,并分别推送每个项目。 🙂 编辑: 我知道如果我这样做: redis.lpush('queue', '1', '2', '3') 我得到了我所期望的,但是在我的真实应用程序中,数组是在运行时生成的,我不知道它的内容。

使用redis作为pub-sub时不需要的多个消息

下面的代码工作的很好,当我做pub / sub使用socket.io。 基本上,我从浏览器发送聊天消息。 在服务器上,我收听这条消息,并把它发回给服务器,同样的消息。 所以,我希望每发送一条消息,都会返回/打印1条消息。 在下面,我可以从多个浏览器login,当我发送一条聊天消息时,它将按照预期返回/打印为单个聊天消息。 io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()})); io.on('connection', function (socket) { socket.on('chat', function (message) { io.emit('chat', "hello world"); }); }); 但是,当我尝试使用redis做pub / sub时,出现了一个问题。 从第一个浏览器:1个聊天消息导致打印出1个聊天消息 从第二个浏览器:1个聊天消息导致打印出2个聊天消息 从第三个浏览器:1个聊天消息导致打印出3个聊天消息 var sub = redis.createClient(); var pub = redis.createClient(); sub.subscribe('chat'); io.use(socketHandshake({store: sessionStore, key:'jsessionid', secret:'secret', parser:cookieParser()})); io.on('connection', function (socket) { socket.on('chat', function (message) { // io.emit('chat', […]