Tag: socket.io

如何停止socket.io发射多次一次

我目前正在使用node.js和socket.io在线制作一个RPG。 一切正常,直到我开始制造碰撞检测系统。 我在网上查找解决scheme,发现有类似的问题,但不明白如何解决我的问题的人。 以下是我的代码。 客户端: function move_character(x){ //socket.io start var collision = io.connect('/collision'); collision.emit('detection', x); collision.on('col', function (msg) { if(msg == true) { if (x == 'up') { $('#sprite').animate({'top': '-=50px'},150); } else if (x == 'down') { $('#sprite').animate({'top': '+=50px'},150); } else if (x == 'left') { $('#sprite').animate({'left': '-=50px'},150); } else if (x == 'right') { […]

在while循环中的socket.emit

我正试图发射一些JSON到服务器每1秒。 while (i > 1) { var checkData = setInterval (function () { var db = new sqlite3.Database('hud_db_master.sqlite3'); db.all("SELECT * FROM hud ORDER BY col_id DESC LIMIT 1;", function(err, rows) { console.log(rows); var jsonData = JSON.stringify(rows); socket.emit('clientMessage', jsonData, 'Pi-Voyager'); }); }, 1000); } 我得到一个空白的控制台约20秒,然后出现以下错误: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed – process out of memory 在搞定setInterval之前,我能够在执行后成功地发出一次数据。

使用socket.io传输图像文件大小

在一个使用Socket.io项目的Node.js ,我通过Socket.io得到一个图像: socket.on('newImage', function (data) { var desc = data.description; var image = data.img; //i want file size of this } 在这个代码中, imagevariables包含图像二进制数据,我想检测该图像的文件大小。 怎么样?

使用Express Application Generator的Socket.io

我一直在挖掘几个小时,以解决这个问题,我找不到一个。 在使用Express的应用程序生成器后,如何开始使用Socket.io。 例如,如果我使用express myapp和npm install –save socket.io创build一个新的应用npm install –save socket.io如何在我的index.jade文件中使用? 我的index.jade文件现在是纯HTML,看起来像这样 html. <head> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); socket.on('message', function(msg){ console.log('you got a message'); }); </script> </head> <body> <canvas id="mycanvas" width="768" height="720"></canvas> </body> 我的routes/index.js文件看起来像这样 var express = require('express'); var router = express.Router(); var io = require('socket.io')(); router.get('/', function(req, res, next) { io.emit('text', { […]

Angularjs和Socket.io,不可能在我的视图中编辑一个值

为了学习使用AngularJS和NodeJS,我想创build一个聊天室…所有的angular度控制器工作正常,我可以发送信息到我的NodeJS服务器(与socket.io)。 但问题是:当我的clientApp收到一个socket.on,并在我的视图中更改var的值,它不工作…你知道为什么吗? 视图: <!– Users connected –> <div class="row" ng-controller="connectedUsersCtrl"> <div class="col-md-8"></div> <div class="col-md-4" ng-model="connectedUsers">{{connectedUsers}}</div> </div> app.js: var chatApp= angular.module('chatApp', []); var socket = io.connect('http://127.0.0.1:2901'); chatApp.controller('connectedUsersCtrl', ['$scope', function ($scope) { socket.on("connectedUsers", function(number) { console.log("There are " + number + " users."); // All work but not this line… ! $scope.connectedUsers = number; }); }]); 谢谢你的帮助。 […]

Socket IO输出太多次了

这个问题已经回答了,但是我根本听不懂。 你可以在这个链接find它。 socket.on调用它的callback太多次了 我和这个家伙有同样的问题。 我试图用socket.io做一个聊天程序,但是当多个用户join时,每个信息都会输出有多less用户连接的次数。 例如,当一个用户连接,他提交一条消息。 它输出一次。 当两个用户连接时,他们的每个消息输出两次。 当三个用户连接时,他们的每个消息输出三次。 这是我的客户端代码: $('document').ready(function() { var server = io.connect('http://localhost:8888'); $('.chat').keydown(function(event){ var save = this; if(event.which == 13){ server.emit('message', $(save).val()); $(save).val(''); return false; } }); server.on('incoming', function(message){ $('#textfield').append("<p>" + message + "</p>"); }); }); 这是我的服务器端代码: var socket_io = require('socket.io').listen(8888).sockets; socket_io.on('connection', function(socket){ socket.on('message', function(message){ socket_io.emit('incoming', message) }); }); 谢谢!

NodeJS – 在套接字内部访问会话

我花了2天访问会话(login用户)通过套接字。 我已经有用户在我的MongoDB,我确实可以login/注册他们没有sockets(槽后或得到)。 我现在需要的只是套接字。 我已经尝试过这些SO解决scheme: socket.io并表示4个会话 如何与Socket.IO 1.x和Express 4.x共享会话? socket.io和会话? 并花费大量的时间search。 尝试不同的事情 我通常会得到未定义的错误或不推荐使用的错误,或者完全没有错误发生。 在遵循上面的教程之后,我自己做了一些调整,我的代码从“难以阅读”变为“太难阅读,必须从头开始”。 所以我不会把我的代码放在这里。 相反,有人可以分享他们最基本的代码来访问套接字内部的会话吗? 随着解释将不胜感激。 更新我跟着这个: 如何与Socket.IO 1.x和Express 4.x共享会话? 我有几个问题。 它仍然不起作用。 会话是空的。 难道我做错了什么? 完整代码: var express = require("express"); var Server = require("http").Server; var session = require("express-session"); var RedisStore = require("connect-redis")(session); var SESSION; var app = express(); var server = Server(app); var sio = require("socket.io")(server); […]

如何在redis中保持HTTP响应

我正在nodeJS上创build一个长轮询聊天应用程序,而不使用Socket.io并使用集群进行扩展。 我必须find一种方法来存储所有长轮询的HTTP请求和响应对象,使其可以跨所有节点群集使用(这样,当收到一个长轮询请求的消息时,我可以得到这个请求并回应) 我已经尝试使用redis,但是,当我对http请求和响应对象进行string化时,我得到“无法使string循环结构”错误。 也许我正在以一种错误的方式接近它。 在这种情况下,我们通常如何在不同的集群上实施lon-polling?

Socket.io不保存在Mongoose上save()

我创build一个简单的聊天只是为了学习socket.io以及如何在MongoDb上保存MongoDb的数据。 经过一番研究,我仍然阻塞,因为mongoose不保存数据。 在这里我的configuration: // configuration var app = require('express')(); http = require('http').Server(app), io = require('socket.io')(http), mongoose = require('mongoose'); // connect to db mongoose.connect('mongodb://localhost/chat', function(err){ if(err){ console.log(err); }else{ console.log('Connected to MongoDb!'); } }); // Schema model var chatSchema = mongoose.Schema({ msg: String, created: {type: Date, default: Date.now} }, { collection: 'chat' }); // model var Chat […]

使用Node.JS,MongoDB和Socket.IO的实时多人游戏:游戏循环和asynchronous调用

我目前正在使用Node.JS,MongoDB和Socket.IO构buildHTML5游戏。 这个项目的目的不是真的创造一个完整的,完全可玩的游戏,而是理解和实现多人游戏编程的一些基本概念,并习惯于MongoDB。 这是我所使用的基本服务器架构。 服务器通过Socket.IO监听客户端,每次接收到消息时,都会将其推送到队列中。 每当玩家想要移动时都会收到消息,或者以某种方式有效地改变游戏。 我留的很模糊,因为向你详细说明这个游戏是什么并不重要。 所以服务器接收来自所有客户端的消息并将其保存在内存中一段时间​​。 每隔50ms,服务器按顺序处理队列中的所有消息,并使游戏状态前进,向客户端广播更改,然后清空队列并开始再次监听客户端。 我在构build这个游戏循环时遇到了一些困难,因为我不确定MongoDB是什么,如果它及时做到,所有的调用都是纯asynchronous的。 让我们说下面的代码是在我的游戏循环,这是我的顾虑: for (var i=0; i<queue.length; i++) { if(queue[i].message.type === "move") { //The server has first to ensure that the player can effectively move, //thus making a query to MongoDB. Once the result has been retrieved, //the server makes an update in MongoDB with the new player […]