Tag: redis

node.js / socket.io,cookie只在本地工作

我试图使用基于cookie的会话,但是它只能在本地机器上工作,而不能在networking上工作。 如果我删除会话相关的东西,它将在networking上工作很好… 你必须原谅缺乏高质量的代码,我刚刚开始使用节点/套接字等等,发现任何明确的指南是艰难的,所以我现在处于n00b领域。 基本上这是迄今为止从各种片段一起砍了大约10%的理解我实际上在做什么… 我在Chrome中看到的错误是: socket.io.js:1632GET http://192.168.0.6:8080/socket.io/1/?t=1334431940273 500(内部服务器错误) Socket.handshake ——- socket.io.js:1632 Socket.connect ——- socket.io.js:1671 套接字——- socket.io.js:1530 io.connect ——- socket.io.js:91 (匿名函数)——- / socket-test /:9 jQuery.extend.ready ——- jquery.js:438 并在服务器的控制台中,我看到: debugging – 提供静态内容/socket.io.js debugging – 授权 警告 – 握手错误没有cookie 我的服务器是: var express = require('express') , app = express.createServer() , io = require('socket.io').listen(app) , connect = require('express/node_modules/connect') , parseCookie […]

随机错误的请求400与Socket.io 1.0.6错误

我在端口8082上使用Node.js,在端口80上使用Apache。 一切工作正常,并比浏览器开始显示错误消息“400错误请求”,CORS错误。 服务器正在设置CORS头。 正如你所看到的我也使用Redis适配器。 var io = require('socket.io').listen(8082); io.adapter(redis({ host: '127.0.0.1', port: 6379 })); io.set('origins', 'domain.com:*'); 不能说为什么有些时候一切正常,有些时候没有。 当Socket.io尝试从池中升级到websocket时,总是发生错误。 当我从https://cdn.socket.io/socket.io-1.0.6.js使用客户端时,我得到了更less的错误。 当我使用socket.io-1.0.6.js的本地参考时,错误发生频率更高。 找不到错误模式。 在erros之后,我重新启动Node.js服务器,尝试一些请求,一次又一次的工作,错误。 有些时候再次运行而不重新启动服务器。 请求标头示例 Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding gzip, deflate Accept-Language pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3 Cookie io=RjKzZ6Y1OTQeSEsPAAAL; SGM_DESENV=cb5ae798c2f6f5d3f38c6ed16a6e4696 Host 200.238.251.79:8082 Origin http://200.238.251.79 Referer http://200.238.251.79/maximiliano/sgp/admin/custodiacompartilhada/add User-Agent Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0 响应标题示例 Access-Control-Allow-Credentials true Access-Control-Allow-Origin http://200.238.251.79 Connection keep-alive […]

使用Redis在PHP和socket.io/node.js之间进行通信

我有一个在Apache上构build并运行的PHP应用程序,使用Nginx作为反向代理来提供静态资源。 我还安装了Redis,用于存储每个用户活动stream的活动ID。 活动被写入MySQL数据库,然后Redis将活动ID推送到每个用户stream中。 当用户收到他/她的活动stream时,应用程序首先从Redis中检索活动标识的用户列表,然后通过MySQL IN()查询获取实际的活动数据。 这一切工作得很好,但是我想开始添加实时能力到这个设置。 我希望能够将这些事件直接推送到用户浏览器,并添加一般的实时通知。 为此,我使用socket.io安装了node.js。 我的socket.io服务器正常运行,客户端在页面加载时自动连接。 我在挣扎的地方是在理解如何从我的PHP应用程序发布消息到socket.io。 由于PHP和node.js不能直接通信,因此我的理解是,由于我已经安装并运行了Redis,所以我最好使用Redis作为中介。 但是我不知道如何去做这件事。 我需要的是一个从PHP发送通知到Redis然后到socket.io的过程的描述(任何代码示例都是非常有用的),以便将它推送到相关客户端。 此外,我不明白如何socket.io会知道发送到哪个客户端。 我将如何传递这些信息并保持一切同步? 这甚至是必要的吗? 我是否需要将我的PHP会话存储在Redis中,并且在用户连接时让socket.io收集数据? 还是有另一种方式? 提前致谢。 请注意:我的PHP SESSION数据当前保存到磁盘。

没有收到这个基本的socket.io + redis安装程序的事件?

我有一个简单的socket.io服务器,使用socket.io-redis,一个socket.io发射器,我运行redis(这对我来说是全新的,我在windows上,我下载了redis并打开了redis-server .exe和redis-cli.exe)。 通过使用命令monitor的redis CLI,我发现服务器已连接,事件从发射器到达redis,但test-server.js从不logging任何内容。 我还需要做什么? socket.io服务器是否需要订阅redis? Redis输出"publish" "socket.io#/#" "\x93\xa7emitter\x83\xa4type\x02\xa4data\x92\xa4test\xa9some data\xa3nsp\xa1/\x82\xa5rooms\x90\xa5flags\x80" testingserver.js var server = require('http').Server(); var io = require('socket.io')(server); var redis = require('socket.io-redis'); io.adapter(redis({ host: '127.0.0.1', port: 6379 })); io.on('connection', function(socket){ console.log('client connected'); // Works socket.emit('connect','test'); // Works }); io.on('test', function(socket){ console.log('test came in'); // Works }); server.listen(3000); testingemit.js var io = require('socket.io-emitter')({ host:'localhost', port:'6379' […]

在多核心服务器中使用socket.io与群集的好方法?

我已经创build了一个nodejs应用程序,在单个内核中正常工作。 此应用程序使用socket.io进行轻快通信。 现在,我想通过在nodejs中使用cluster模块使其在多核系统上运行来垂直扩展我的应用程序。 我的应用程序中的所有东西都将数据存储在Redis中,因此,处理一些基本的数据和会话是没有问题的。 但是,当我使用群集产生多个工作进程时,似乎每个worker都有自己的套接字处理。 例如,假设有一个叫做“客人”房间的聊天室。 用户A和用户B连接到房间,并分配给不同的工作进程。 由于它们处于不同的进程中,并且这些进程不共享套接字侦听器,所以用户A和用户B无法相互通信。 什么是解决这个问题的好方法? socket.io是否支持多核系统? socket.io仅适用于单核使用?

如何在JavaScript中获得redis中的所有键和值?

我正在使用JavaScript创build节点API。 我用redis作为我的关键价值商店。 我在我的应用程序中创build了一个redis客户端,并能够获取关键的值。 我想要检索所有的键及其值。 到目前为止,我已经这样做了: app.get('/jobs', function (req, res) { var jobs = []; client.keys('*', function (err, keys) { if (err) return console.log(err); if(keys){ for(var i=0;i<keys.length;i++){ client.get(keys[i], function (error, value) { if (err) return console.log(err); var job = {}; job['jobId']=keys[i]; job['data']=value; jobs.push(job); }); } console.log(jobs); res.json({data:jobs}); } }); }); 但我总是得到空白数组作为回应。 有没有什么办法在JavaScript中做到这一点? 谢谢

Nodejs从pub / sub的客户端发布

我正在尝试在nodejs中构build一个小应用程序来发布和订阅。 我被困在如何从客户端发布。 这是我有的代码。 这是我的服务器代码(server.js) var express = require('express'), app = express(), http = require('http'), server = http.createServer(app); app.use(express.bodyParser()); app.get('/', function(req, res) { res.sendfile(__dirname + '/public/index.html'); }); app.post('/publish/:channel/:event/', function(req, res) { console.log("**************************************"); var params = req.params; console.log(req.params); console.log(req.body); var data = req.body; console.log("**************************************"); var result = io.sockets.emit(params.channel,{event:params.event,data:data}); //console.log(result); console.log("**************************************"); res.sendfile(__dirname + '/public/index.html'); }); //include static files […]

亚马逊EC2的微型实例足以实现简单的node.js和redis安装吗?

我正在开发一个非常简单的产品组合网站。 它很可能几乎没有任何stream量。 我想使用node.js和redis作为应用程序的后端。 由于亚马逊ec2有1年免费的微型实例,我想知道是否将是足够好的主机redis和node.js上。 正如我所说,该网站将是非常轻量级,不经常访问。 谢谢!

如何在服务器重新启动时在节点js中维护持久性会话?

据我迄今为止从服务器重新启动后,使会话持久性的计算器的答案。 有4种可能的方式,我考虑用我的意思应用程序。 cookie-Sessions https://www.npmjs.com/package/cookie-session 使用Jsonnetworking令牌(JWT) https://www.npmjs.com/package/jsonwebtoken 使用connect-mongo / connect-redis passport.js 现在我的疑问是,如果我将重新启动我的服务器在Mongo和Redis。 会话将仍然在那里,因为他们是外部数据存储。 但如何使我的会话持久使用JWT和cookie会话。 这些会话variables在哪里存储。 在passport.js的情况下,我遇到的解决scheme是使会话持久性是将会话数据存储在connect-mongo / connect-redis中。 有没有其他的方式在护照使会议持续?

节点应用程序之间的共享会话?

我目前有两个单独的节点应用程序运行在两个不同的端口,但共享相同的后端数据存储。 我需要在两个应用程序之间共享用户会话,以便当用户通过一个应用程序login时,他们的会话是可用的,他们似乎login到另一个应用程序。 在这种情况下,它是一个面向公众的网站和pipe理后端。 我们的设置如下: 节点与快递 本地策略正在使用护照处理身份validation 我们使用connect-redis来允许我们通过redis来共享会话。 我们的域名如下所示:www.mydomain.com和adm.mydomain.com 会话内容(和redis)的configuration对于两个应用程序都是相同的: session: { options: { secret: "my secret", cookie: { domain: "mydomain.com", maxAge:1000*60*60*24 } }, redis: { host: 'my host', maxAge: 86400000, secret: "my secret" } } app.js中会话内容的configuration如下所示: if ( app.settings.env === "production" ) { session.options.store = new RedisStore(session.redis); } app.use(express.session(session.options)); app.use(passport.initialize()); app.use(passport.session({ secret: 'a different secret' […]