Tag: socket.io

每小时更新DB(mongo)的最佳方法?

我正在准备一个小型的应用程序,将汇总我的网站上的用户数据(通过socket.io)。 我想每小时将所有数据插入到monogDB中。 什么是最好的方法来做到这一点? setInterval(60000)似乎是一个比特跛脚:)

是否有可能使用Nodejs和Socket.io更新页面的单个部分?

我正在尝试创build一个基本的Node应用程序,每当客户端连接时,我想更新页面上显示的计数器。 (我的目标是创build这个应用程序的最简单,可学习的forms来演示节点给我的讲师)。 服务器端应用程序片段: build立连接 var clients = 0; io.sockets.on('connection', function (socket) { socket.on('connect', function () { clients += 1 }); socket.on('disconnect', function(){ clients -= 1 }); }); 呈现页面 app.get(navigation.chat.page, function(req, res){ res.render('chat', { title: navigation.chat.title, connected: clients }); }); 聊天页面jade模板片段: span#client_count #{connected} | connected clients 客户端的jQuery,Socket.io和JavaScript var socket = io.connect('http://localhost'); $(document).ready(function(){ socket.on('connect', socket.emit('connect')); }); 问题:连接的客户端数量仅在页面刷新时更新。 […]

Express – socket.io – 读取会话

我使用express和socket.io。 当你创build一个与快递的会话。 点击button,使用Ajax和POST方法(login),我保存一个会话。 app.post('/login', function(req, res){ req.session.loginid = req.body.lgnid; }); 在socket.io中它无法读取。 感谢您的build议。 我的源代码: var express = require('express'); var app = express.createServer(); var io = require('socket.io').listen(app); var MemoryStore = express.session.MemoryStore; var sessionStore = new MemoryStore(); var parseCookie = require('connect').utils.parseCookie; var Session = require('connect').middleware.session.Session; var stylus = require('stylus'); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({store: sessionStore , secret: 'secret' , key: […]

在离开页面/页面closures时从用户散列中删除某人

我正在构build一个Node.js / Socket.io项目。 我有基于他们的websocket id的用户散列。 当用户提出以下请求时,我想将其添加到查看该页面的一组用户。 app.get('/board/:id', function(req, res){} 我想保留一些类似的东西 Browsing = {username:id,username:id,…} 不过, 我不确定如何删除用户可以说,如果他们离开页面。 是否有某种function在页面离开时被调用? 部分解决scheme: 以下似乎在Chrome上做的伎俩: $(window).unload(function(){ var username = $('#username').text(); var pid = currentProject; var data = { username: username, id : pid } socket.emit('leaving-page', data); })

Socket.IO中的套接字引用

我是nodejs的新手,正在尝试socket.io。 我想发送消息到特定的套接字,所以我想我会存储引用到套接字。 var controls = {}; var clients = {}; var control = io .of("/control") .on("connection", function(socket){ socket.on("connect_player", function(data){ var id = data.screen_id; controls[socket.id] = id; }); socket.on("msg", function(data){ id = controls[socket.id] player.socket(clients[id]).emit("msg", data); }); }); var player = io .of("/player") .on("connection", function(socket){ socket.on("set_id", function(id){ clients[id] = socket.id }); }); 我首先启动一个连接到“播放器”命名空间的网页,并显示一个id(硬编码)。 然后,另一个网页连接到“控制”命名空间与玩家相同的ID,现在控制器应该能够发送消息到特定的播放器,但这个工作一段时间,然后失败。 在工作期间,我可以从控制页面发送消息到特定的播放器页面。 在停止工作后,我查看了播放器名称空间中的套接字标识符,发现套接字标识符与初始套接字标识符不同。 我想我在这里做错了什么,或者对概念有错误的理解。 […]

当我发送一个JS对象到一个Node.js服务器并要求返回同一个对象时,服务器发送一个修改后的对象

我有一个网页,build立与node.js服务器的通信。 我发送它的对象,并返回它收到的同一个对象。 但是,返回的对象是不同的 – 它的所有方法都不见了。 这是显示我在做什么的代码。 我用一个对象发送一个事件: editor.getSession().on('change', function(event) { socket.emit('modificarCodigo', event); }); 我这样回来: socket.on('modificarCodigo', function(data) { socket.broadcast.to(socket.grupo).emit('actualizarCodigo', data); }); 我怎样才能让node.js返回我发送给它的对象,而不是修改它呢? 我有一个猜测,我现在看到的行为是由devise – 如果这是真的,我怎么能改变它?

socket.io会话ID和快速会话

我正在使用socket.io创build一个应用程序,我的问题是当用户在同一个浏览器中打开多个选项卡时,它将创build新的会话ID [socket.id]。 我如何在所有的选项卡中携带相同的会话ID? 我在这篇文章danielbaulig中使用了快速会话,但是这些文章如何帮助我在浏览器中的所有选项卡上携带相同的socket.io会话ID? 而上述职位已过时,你能解决这些问题吗? 谢谢..

为什么我的socket.io事件不能在多个浏览器上处理?

所以我写了一个小型的“共同浏览”演示。 主要用于教育目的。 无论如何,计划是这样的。 用户打开浏览器到我的服务器并移动鼠标。 这样做时,浏览器将鼠标坐标发送到服务器,服务器将坐标中继到任何订阅该通道的浏览器。 坐标然后显示在文本框中。 我正在使用nodejs和socket.io 。 这是我的server.js: var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs'); app.listen(80); function handler(req, res) { var file = __dirname + '/public/index.html'; fs.readFile(file, function(err, data) { if(err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); } ); } io.sockets.on('connection', function(socket) { socket.on('m', function(data) { socket.emit('relay', {msg: […]

socket.io使用for循环来添加socket.on方法

承担 socketMethods:{ update:function(data){ this.emit("test", data); console.log("socket.update"); }, test:function(data){ this.emit("test", data); console.log("socket.test"); } } 这下面是可能的,并允许我发出“testing”和“更新”,“testing”和“更新”将被称为 socket.on("test", function(data){ dummy.socketMethods.test.call(socket, data); }); socket.on("update", function(data){ dummy.socketMethods.update.call(socket, data); }); 下面这些是不可能的…如果我发出“testing”或“更新”,每个人都会调用“testing”。 如果我使用FOR循环,所有方法将成为所谓的“最后一个”方法。 那就是:如果我切换更新并testing,那么testing是第一次,并且更新在socketMethods对象中是第二次。 无论我是否要求“testing”或“更新”,都会调用“更新” for(key in dummy.socketMethods){ socket.on(key, function(data){ dummy.socketMethods[key].call(socket, data); }); } var methods = ["test", "update"]; while(methods.length !== 0){ var method = methods.pop(); console.log(method); socket.on(method, function(data){ dummy.socketMethods[method].call(socket, data); }); […]

mongodb,更新后得到结果行

我正在使用mongodb,node.js和socket.io,并试图减less访问数据库的数量。 我需要更新一行; 并在返回更新后的行这是我是如何做到的: db.collection('users').update({_id:targetID}, {$set: { 'property': 'value' }}, {safe:true}, function(err, result) { db.collection('users').find({_id:targetID}).toArray(function(error, results){ //a socket.io resend the content }); }); 它的工作,但我真的倒下,像我在这里有一个无用的步骤。 更新函数的callback似乎是一个布尔值。 顺便说一句,有没有比这更好的文档: http : //docs.mongodb.org/manual/applications/update/ ? 我想find属性和方法的列表。 例如{safe:true} 。 它似乎不工作没有它,但我不能在参考中find它。 也许我完全错了,这不是我应该这样做的方式。 如果你有更好的主意…… 🙂