Tag: socket.io

Express和node.js从一个文件夹运行; 所有链接都指向url根目录

我已经安装节点内的文件夹,并通过Apache转发。 我这样做是因为我有几个虚拟主机通过Apache运行,我不想花时间通过节点设置所有的东西。 同一台服务器上的Apache和Node.js 不过,我正在尝试创build一个聊天引擎。 我试图包含一些js文件,但他们searchhttp://example.org/myscript.js而不是http://example.org/chat/myscript.js 我通过使用来解决这个问题 <base href="/chat/"> 不过,现在我正在尝试整合socket.io。 我包含从https://cdn.socket.io/socket.io-1.3.5.js的 socket.io,因为我无法得到本地serverd /socket.io/socket.io.js正确定位。 现在socket.io正在尝试连接到http://example.org/socket.io该模块不存在。 如果有的话,正确的path应该是http://example.org/chat/socket.io 我一直在寻找遍布互联网的解决scheme。 关于nodejs / express如何操作,我一定有一些基本的或明显的东西。 太感谢了! Server.js – 这是我从节点开始的文件。 var express = require('express'); var path = require('path'); var app = express(); var http = require('http').createServer(app); var io = require('socket.io').listen(http, { log: true, resource:'/socket.io/'}); app.use('/socket.io', express.static(path.join(__dirname,'/node_modules/socket.io/lib/'))); app.use('/bootstrap', express.static(path.join(__dirname,'/node_modules/bootstrap/dist/'))); app.use('/', express.static(__dirname)); var server = […]

无法从本地计算机上的socket.io-client连接到Azure Web App上的socket.io

我正在尝试获取作为Azure Web App托pipe的socket.io服务器与本地计算机上的socket.io-client进行通信。 我testing了我的本地networking上的两台计算机之间的代码,它工作正常…客户端发送消息到服务器和服务器响应与确定。 但是,当我使用连续部署加载服务器文件并尝试连接它时,客户端无法连接,我无法获得有关正在进行的任何反馈。 io.on('error, function(){};甚至不会触发。 这里是客户端的代码(我刚刚修改了IP地址): var socket = require('socket.io-client')('http://160.23.1.5:3100'); var readline = require('readline'), rl = readline.createInterface(process.stdin, process.stdout); socket.on('connect', function(){ console.log('Connected to Server!'); }); socket.on('error', function(){ console.log('Erorr connecting to server'); }); socket.on('DATA', function (data) { console.log(data); /// **** Code for entering client input }); rl.setPrompt('Server says> : '); rl.prompt(); rl.on('line', function(line){ socket.emit('RANDOM', {value: […]

socket.io-redis是否支持redis集群?

我可以使用socket-io-redis而不是单个redis服务器作为默认示例状态,透明地使用redis群集(无需为redis群集编写任何客户端代码)? 不幸的是,似乎没有这方面的官方文件。 另外,如果没有redis集群,socket.io服务器有多less用户可以使用单个redis服务器支持socket.io-redis后端? 更新: Socket.io-redis允许指定redis客户端使用。 可能是一些node_redis兼容的redis客户端,它也支持redis集群可以使用? ioredis(唯一的全function/推荐客户端)支持redis集群,但我不确定它是否与node_redis客户端兼容。 有没有人有一些信息或其他可能的解决scheme? 注:我知道Redis云提供了一个单一端点模式的扩展解决scheme,但我需要一个群集解决scheme。

NODEJS实时游戏数据传输

为了练习我正在尝试开发一个多人游戏。 我使用NODEJS和HTML5canvas。 在客户端和服务器之间共享数据我使用的是Socket.io 我想知道的是如何优化客户端 – 服务器数据传输。 信息 玩家一直在移动,我必须每1000/60 ms(60 fps)更新玩家位置。 玩家动作: vecX = mouse.x – player.x; vecY = mouse.y – player.y; vec = Math.sqrt(vecX*vecX + vecY*vecY); dx = vecX/vec; dy = vecY/vec; player.x += dx*player.speed; player.y += dy*player.speed; 我试过了吗? 第一次尝试: 客户端将鼠标位置发送到每个鼠标移动的服务器。 服务器保存鼠标位置 服务器每1000/60 ms刷新玩家位置(每个玩家鼠标位置),并将其检索给每个在其屏幕上具有位置的玩家(屏幕只显示地图的一部分)。 – >问题:滞后很多。 第二次尝试: 客户端将dx和dy发送到服务器以进行每次鼠标移动(而不是鼠标位置)。 服务器检索这个dx和dy给每个玩家。 客户端通过dx和dy移动每个玩家。 服务器通过dx和dy移动每个播放器(只刷新服务器端数据)。 服务器每100毫秒检索一次玩家的位置(纠正位置)。 – >问题:数据不同步

在socket io中停止接收事件一段时间

我在我的套接字客户端同时充斥着许多事件。 假设有任何两个事件eventA and eventB ,其中eventB仅在eventA发生eventB被使用。 所以到那时我想忽略那个事件。 如何在nodejs中使用socket.io来实现这个场景?

socket.io xhr慢速连接上的错误(3G移动networking)

当我在3G移动networking(慢速互联网连接)上testing我的真实聊天应用程序时, Socket.io反复断开连接然后重新连接。 我logging了原因。 它说"xhr post error"引起"transport error"然后断开连接。 我可以知道"xhr post error"是什么意思,为什么这个错误出现在缓慢的连接中,以及如何解决这个问题? 我正在使用socket.io-client.java 0.4.2版本

为什么我在Node的HTTP服务器上有这么多连接事件?

我有一个使用socket.io的Web应用程序。 它在本地机器上运行localhost:8000。 为了在我的应用程序中find令人讨厌的资源泄漏,我尝试在我的HTTP服务器上注销连接事件: server.on('connection', function(conn) { //log out connection details }); 在页面加载后,当我在浏览器中打开页面时,可以在日志中看到多个连接事件 – 如下所示: connection established: 127.0.0.1:54148 connection established: 127.0.0.1:54149 connection established: 127.0.0.1:54146 connection established: 127.0.0.1:54152 connection established: 127.0.0.1:54144 connection established: 127.0.0.1:54155 奇怪的是,我没有创build一个WebSocket连接后,页面加载 – 只有当用户点击一个button。 但是我没有点击任何button,我仍然看到这些奇怪的联系。 如果我点击我的button来连接到我的服务器socket.io日志显示一个新的连接: connection established: 127.0.0.1:54155 幸运的是,我在日志中看到的每个连接都在一段时间后closures – 所以我猜这不能成为我资源泄露的原因。 但我仍然好奇:是什么原因导致这些连接事件? 为什么端口号这么奇怪(不是我的服务器监听的8000)? 编辑: 我的服务器configuration不是一个特殊的。 在server.js : var express = require('express'); var app […]

节点JS中的单个定时器或多个定时器?

你好! 我正在开发拍卖节点Js(Express框架,socket.io)。 你能告诉我什么是更好的方式使用每个产品的每个产品或多个计时器的单个计时器? 例如(代码是最小的): 一旦开始… for(active products) { timer[timer_id] = setInterval(.. sec–; …. ) } 或每秒… timer = setInterval(.. for(only active products) { sec–; } ) 两个编程代码现在都在工作。 但是我想知道哪种方式更好,还是有其他方法可以做到这一点? 提前致谢!

长时间触发Socket.io断开连接事件

我只是想使用Socket.io创build一个简单的应用程序。 我试图发送一个通知(技术上,发出一个事件)给所有连接的用户,如果一个特定的用户,用户X已经断开,用户X已经离开或已经断开。 这是我的服务器端代码。 io.on('connection', function(socket){ console.log('Connected! ' + socket.id); socket.on('disconnect', function(){ for(var i=0;i<onlineUsers.length;i++) { if(onlineUsers[i].socketId == socket.id) { var newMessage = {}; newMessage.socketId = onlineUsers[i].socketId; newMessage.fullName = onlineUsers[i].fullName; newMessage.message = newMessage.fullName + " IS DISCONNETED!"; io.emit('newMessage', newMessage); onlineUsers.splice(i,1); console.log('splicing id ' + socket.id); } } } 我猜测代码正在执行,但需要很长时间才能发出断开连接事件。 客户端断开连接2分钟后,我收到断开连接消息。 为什么需要这么长时间? 这段代码可能是错的吗? 我也不明白什么时候客户端被认为是断开的。 如果应用程序closures,或者浏览器closures或互联网closures? 提前致谢。 更新:我在Cloud9上进行了testing部署,而且我的实时部署在Azure Cloud上。 […]

带有AudioContext的Socket.io在接收时发送和接收audio错误

我正在尝试构build一些东西,用户可以使用socket.io,audioContext,js作为前端,Node.js,socket.io作为服务器,让用户可以即时发送audio给很多人。 我可以录制audio,将其发送到服务器并将其发回给其他用户,但我无法播放这些数据。 我想这肯定是我发送它们的问题,或者我如何处理接收它们的缓冲区。 我得到以下错误: 更新! 传递给decodeAudioData的缓冲区包含未知的内容types。 audio传递正常,缓冲区没有错误地创build,但没有声音反馈。 用户按下logging,并开始logging/stream与他以下function: 这是如何开始的: navigator.getUserMedia({audio: true,video: false}, initializeRecorder, errorCallback); function initializeRecorder(stream) { var bufferSize = 2048; audioCtx = new (window.AudioContext || window.webkitAudioContext)(); var source = audioCtx.createMediaStreamSource(stream); var recorder = audioCtx.createScriptProcessor(bufferSize, 1, 1); recorder.onaudioprocess = recorderProcess; source.connect(recorder); recorder.connect(audioCtx.destination); recording = true; initialized = true; play = false; stop = true; } […]