Tag: socket.io

仅在NodeJs上构build网站,在http上构buildExpress阻止请求

在使用Nodejs,Express和Jade模板时,我有一个关于这个例子的问题。 所有示例都显示了如何构build某种用户pipe理界面,您可以在其中添加用户configuration文件,将其删除并进行pipe理。 这些被认为是NodeJ的初学者指南。 我的问题是,如果我有10个用户同时访问相同的接口并执行相同的操作,那么NodeJs将会阻止其他用户在同一个端口上运行的请求。 所以我们假设我正在抽出一个可能类似10000的用户列表。是的,我可以做分页,但这不是重点。 当我从服务器获得列表时,另外4个用户想要访问应用程序。 他们必须等待我的过程结束。 这是我的问题 – 如何避免使用NodeJS&Express? 我在这个问题上好几个月了! 我目前有一些地方做到以下几点: 运行一个端口上的东西的主要处理 在另一个端口上运行一个Socket.io进程 使用粘性会话 这个想法是,我做了一个请求(如获取项目列表),并立即响应一些请求引用,但没有请求的项目,从而释放端口。 在“asynchronous”的背景下,我做了获取物品的过程。 完成后,我做一个HTTP请求从一个节点到套接字节点端口节点发送通过的项目。 当这样做,然后执行一个socket.io与数据和初始请求引用发出,以便正确的用户获取消息。 在客户端,我有一个事件监听socket,然后通过填充列表完成ajax请求。 我在这方面取得了一些成功! 它实际上在一定程度上工作! 我有一个在线问题,由于IP地址,使socket.io玩起来很有趣。 我也有多个使用集群的工人。 我以如下方式使用它: 我创build一个主人 我产卵了工人 我接受任何连接请求并将其传递给相关的工作人员。 我为主节点请求以及套接字请求执行此操作。 就像我说的我使用2个端口! 正如你所看到的,我已经完成了很多工作,而且我没有得到一个合适的解决scheme! 我的问题是这个 – 我走遍了世界各地10次,只是错过了一些简单的东西? 这听起来很复杂,以实现一个非阻塞nodejs唯一的网站。 我问自己 – 当然,所有这些教程都不会错过这样重要的事情! 但他们做到了! 我已经研究,阅读和testing了很多代码 – 这是我第一次在stackoverflow上询问任何东西。 谢谢你的帮助。 PS一个同样的方法的例子是这样的:我要求使用jasper的报告,我传递参数,并与上述的“延迟ajax响应”方法,我只是释放端口,并在后台生成一个非常密集的报告(这可以是非常密集的过程,因为大量的计算正在执行)..! 我真的没有看到更好的方法 – 任何帮助将超级赞赏! 感谢您花时间阅读!

无法加载资源socket.io

我想在我的node.js应用程序中使用socket.io,但我的客户端无法从我的服务器获取库,我不知道为什么。 错误:加载资源失败:服务器以404(未find)的http:// localhost:3000 / socket.io / socket.io.js状态响应服务器站点: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); app.use(express.static('public')); app.get('/', function (req, res) { res.sendFile( __dirname + "/" + "index.html" ); }); app.listen(3000, function () { console.log('Example app listening on port 3000!'); }); io.on('connection', function(socket){ console.log('a user connected'); }); 客户端: […]

连接到不同名称空间时的socketIO握手行为

我遇到了socketIO(nodejs)和使用多个命名空间的麻烦。 也许我误解了如何使用它,但这是我理解它应该如何工作。 服务器端(nodejs) io.of('/game').on('connection', socket => { console.log(socket.handshake.query); console.log('user connected to game socket', socket.id); }) io.of('/api').on('connection',socket => { console.log(socket.handshake.query); console.log('user connected to api socket', socket.id); } 客户端(浏览器) function test (){ gameSocketTest = io.connect('http://localhost:4003/game',{query:{test:'test'}}); apiSocketTest = io.connect('http://localhost:4003/api'); } 奇怪的是,查询(我只发送到“游戏”命名空间)到达两个处理程序,也是api之一。 如果我将客户端代码的顺序反转为: function test (){ apiSocketTest = io.connect('http://localhost:4003/api'); gameSocketTest = io.connect('http://localhost:4003/game',{query:{test:'test'}}); } 握手中的查询在两个处理器服务器端都是空的。 所以我的结论是,这种或那种相同的握手是用于这两个连接(但套接字ID是不同的两个)。 是不是可以做我想做的事? 如果是这样,我不理解这个奇怪的握手行为。 根据我的理解,在客户端调用“io.connect()”应该创build2个独立的套接字客户端,每个客户端都有自己的握手。 谢谢你的帮助! […]

断开连接时销毁socket.io连接

我遇到了一个问题,用户从socket.io断开,实例保持活动,包括所有的事件监听器。 以下两个示例都是由于数百行而导致的进度的部分代码。 但是这个问题依然存在。 app.js例子: var express = require('express'), app = express(), routes = require('./routes/index'), server = require('http').createServer(app); io = require('socket.io').listen(server); app.engine('handlebars', exphbs({ defaultLayout: 'main' })); app.set('view engine', 'handlebars'); app.use('/', routes); server.listen(3000, function() { console.log('listening on *:3000'); }); module.exports = app; index.js路由示例: var express = require('express'), router = express.Router(); router.get('/', function(req, res) { res.render('home', { title: […]

使实时socket.io Pong游戏更快

我刚刚完成了使用node.js和socket.io作为后端的Pong游戏,用jQuery作为客户端。 我把游戏放在我的免费层AWS实例上,机制工作正常,但延迟是无法玩的。 在游戏中,控制它的玩家的桨在本地移动。 客户端也发送一个服务器请求,每个requestFrameAnimation广播桨板运动到对手。 为了发射球,发球的球员按下发送服务器请求的空格键,然后向两个球员发出球开始运动。 桨运动和球发射都受到延迟的影响。 对于桨我觉得问题是,我发送一个服务器请求每个requestFrameAnimation这可能是一个速度快。 也许我应该设置一个setInterval,每隔一秒钟将玩家的桨位置发送给对手。 至于球,因为它开始移动的信号是由服务器发送的,我想我需要发送一个实际的时间来提前发射空格键,所以每个本地机器可以倒计时到这个时间。 这里是我的客户端代码的一些上下文剪辑: function updateFrame(){ paddleSpeed = 0; if (keysPressed.up){ // Move paddle up if (!(myPaddle.offset().top <= arena.offset().top)){ // Make sure paddle isn't at top paddleSpeed -= 8; } } if (keysPressed.down) { // Move paddle down if (!(myPaddle.offset().top+paddleL.height() >= arena.offset().top + arena.height())){ // Make sure paddle isn't […]

TypeError:io.connect不是一个函数

我正在使用节点js和socket.io( http://rawkes.com/articles/creating-a-real-time-multiplayer-game-with-websockets-and-node.html )来学习一个简单的多人游戏教程。 。 我有一个问题,当我试图连接到套接字server.I得到一个错误,说TypeError:io.connect不是一个函数PS:我是一个总的初学者在节点js和socket.io所以请帮助我。 var util = require("util"); io = require("socket.io"), Player = require("./Player").Player; var socket, players; function init(){ players = []; socket = io.listen(8000); socket.configure(function() { socket.set("transports", ["websocket"]); socket.set("log level", 2); }); setEventHandlers(); socket = io.connect("http://localhost", {port: 8000, transports: ["websocket"]}); };

socket.emit不适用于其他打开的连接

我正在做使用node.js的tic tac脚趾多人游戏,但我正面临以下问题 1>警报不会在其他打开的连接中popup //app.js var io = require('socket.io')(server,{}); io.sockets.on('connection', function(socket){ socket.on('blockClicked',function(data){ socket.emit('newPositions',data.value); }); socket.on('disconnect',function(){ delete SOCKET_LIST[socket.id]; }); }); //index.html socket.on('newPositions',function(data){ blockSelected(data); alert("recieved"+data); }); 我哪里错了?

移动我的聊天应用程序在常规的URL而不是本地主机

我已经做了一个聊天服务器,端口80听我的网站,所以每次我想访问我的网站,我必须打开本地主机:80,但我想访问我的网站的常规页面,并给它相同的聊天function,我只是build成。 例如,我想在打开mysite.com/page.php时显示我的聊天function。 我怎么做? 因为打算打开我的网站的人将打开我的url,我很困惑如何将该聊天应用程序从本地主机移动到我的真实网站。

使用Socket.io来填充谷歌区域图 – 'google.visualization.DataTable不是一个构造函数'

我使用NodeJS和Socket.io从数据库中获取数据。 我现在想用这些数据填写谷歌面积图,但我有点失败。 数据以Objectsforms传输。 每个Object包含两个值(date时间和值)。 我将这些值附加到数组,然后将它们存储在DataTable : google.load('visualization', '1', { packages: ['corechart'] }); google.setOnLoadCallback(drawChart); var socket = io(); getData(); function drawChart(dataArray) { var data = new google.visualization.DataTable(); data.addColumn('string', 'DateTime'); data.addColumn('number', 'Value'); for (var i = 0; i < dataArray.length; i += 2) { console.log(dataArray[0]); data.addRow([dataArray[i], dataArray[i + 1]]); } var chart = new google.visualization.AreaChart(document.getElementById('chart')); chart.draw(data, { […]

如何处理webRTC多对多系统上的socket.io多个连接?

我已经build立了一个webrtc多对多系统(几个月前: WebRTCvideo会议(多对多) ),使用socket.io作为信令通道。 它工作正常,但我没有处理许多用户的许多房间,我只是把所有的用户放在一个单一的房间(服务器端的用户数组,node.js)。 首先,当我构build系统时,我意识到当新参与者到达时,我不能调用io.sockets.emit(“房间”),然后创build优惠和答案。 用户(已经在房间中)不能同时向新参与者发送报价,新参与者不能同时向这些用户发送答案。 它必须是一对一的连接过程,所以一个用户(已经在房间里)把这个提议发送给新的参与者,最后一个用户返回每个用户的答案。 我通过将新的参与者socket_id传递给用户来做到这一点,所以当第一个用户钓鱼与新参与者的进程连接时,他调用服务器并发送新的参与者socket_id,然后服务器调用(io.sockets.socket(“目标“)。发出(…))用户号码二等等。 我想知道我是否正确,我不能同时在用户(已经在房间里)和新参与者之间进行提供/回答协商。 另一方面,我知道socket.io处理多路复用,并且许多套接字可以同时连接,但是如果我使用全局variables来pipe理报价/响应协商,例如一个索引variables随着用户已经增加在房间里与新参与者有联系,我的意思是: users[index];//let's say we have 5 users and currentuser is the new guy io.sockets.socket(users[index]).emit('user incoming', currentuser); 并突然其他新的参与者到达currentuser仍然连接到其余的用户,比方说,用户数4,所以索引值将3(以编程方式)。 在这种情况下会发生什么?因为这个突然的新参与者将成为新的当前用户,并且以前的当前用户还没有完成连接到所有用户,我的意思是,他们使用相同的variables,相同的variables实例,我对此感到困惑点。 我想要为许多用户创build许多房间的代码,但我需要了解这一点。 我testing了我的应用程序,一切工作正常,但我没有与并发用户连接testing。 我应该使用Socket.io函数(发出,客户等),而不是使用全局variables? 最后我的代码,关注socket.on('user incoming',function(room){…} 我从Simon Pietro Romano的webRTC实时通信中获得了这个信息,Sam Dutton也是这个话题中的一个硬汉: var users = []; var currentuser; var index = -1; io.sockets.on('connection', function (socket){ // Handle 'message' messages socket.on('message', function […]