Tag: socket.io

是否有可能与摩卡testingsocket.io应用程序

我有一个Node.js与Socket.io服务器。 所以我想用摩卡书写testing来改善发展。 我已经search了很多,find有关与Mochatestingsocket.io服务器的一切,我发现是所有http://liamkaufman.com/blog/2012/01/28/testing-socketio-with-mocha-should-and- socketio客户机/ 但是在Mocha的testing目录下有服务器和testing,并且都是从Mocha开始的,当时我已经有了服务器并且只是想testing它。 所以我写了下面的代码: var assert = require("assert"), should = require('should'), io = require('socket.io-client'), socketURL = 'http://localhost:3102', options ={ transports: ['websocket'], 'force new connection': true, 'reconnection delay' : 0, 'reopen delay' : 0 }; describe('Server', function(){ var socket; beforeEach(function(done) { // Setup console.log('Establishing connection'); socket = io.connect(socketURL, options); socket.on('connect', function() { console.log('worked…'); done(); […]

Socket.io作为负载平衡器

我正在开发一个Twitter应用程序(在后端)消费推文做了一些相当激烈的处理,然后将数据存储在数据库中供客户端使用。 我所有的服务器都在运行node.js. 我将使用nTwitter为node.js连接到Twitter Streaming API的服务器。 然后,我想让这台服务器将Tweets传递给工作服务器,并根据Tweet ID(ID中的最后一位数字)分配负载。 现在,我使用的Socket.io (和Socket.io客户端 )似乎运行得很好。 Websocket协议似乎是理想的。 我想知道是否有任何理由不以这种方式使用Socket.io?

Socket.io创build的套接字ID有多独特?

每个套接字都有一个唯一的ID,可以用来查找套接字并发送给它。 这是一个string,但它有多独特? 碰撞是否可以在与群集模块一起运行的多个socket.io对象中进行,而无需同步? 如果检测到碰撞,可以更改ID吗? 我可以改变密钥的长度或生成它的algorithm,以便为每个进程(即进程ID)使用唯一的值播种ID吗?

当客户端尝试使用旧协议设置websocket时,socket.io如何工作?

我得到一个JavaScript错误'错误在WebSocket握手期间:'连接'标题丢失'当试图连接到一个旧的浏览器(iPad 1移动Safari浏览器,phantomjs)上的socket.io websocket。 据我所知这是因为这些浏览器试图连接到websocket使用较旧的不支持的websocket协议标准(phantomjs发送Sec-WebSocket-Key1和Sec-WebSocket-Key2没有Sec-WebSocket-Version作为握手错误的一部分)。 当websocket发生故障时,它应该尝试通过其他的传输方法(xhr,jsonp)进行连接,然而socket.on('connect')似乎从来没有为这些传输尝试websocket握手旧协议而触发。 以下是我们添加到客户端的一些debugging输出。 var socket = io.connect(); socket.on('connecting', function() { console.log('[Socket Client] Connecting to server using ' + socket.socket.transport.name + '(' + socket.socket.transport.sessid + ')'); }); socket.on('connect', function() { console.log('[Socket Client] Connected to server'); }); socket.on('connect_failed', function() { console.log('[Socket Client] Connection failed'); }); socket.on('reconnecting', function() { console.log('[Socket Client] Reconnecting…'); }); socket.on('reconnect_failed', function() […]

带有socket.io和firmata的raspbian(模型B)的Node.js运行缓慢

我正在运行一个Raspberry Pi Model B(512MB RAM),配有一个16GB的300MB / s SD卡,最近的raspbian已经升级了。 在这台机器上我build立了一个apache2服务器,node.js和socket.io和firmata。 在我的networking应用程序中,videostream是一个关键特性。 当我访问我的networking服务器只是为了stream式传输video(没有node / socket.io / firmata)时,所有内容都以良好的性能stream传输。 但是当我打开node.js / socket.io / firmata它很慢,需要5-7秒才能开始stream式传输video。 首先安装node.js时遇到问题。 从编译/安装像一个魅力来源的Node.js,但是当我试图运行它,我得到了这个神秘的“非法指令”的消息。 作为替代scheme,我使用预编译的debian-packages并使用dpkg使用此repo安装它们: Node.js installation for Raspberry Pi… 他们说Nodejs运行速度会比较慢,但这对我来说是不能接受的。 任何提示? 感谢致敬!

节点ios socket.io SSL与xcodedebugging工作,但不与ipa安装

有节点https设置 const server = require('https').createServer( { key: fs.readFileSync('ssl/some.key'), cert: fs.readFileSync('ssl/some.crt') }, handler); iOS应用程序执行良好的xcodedebugging,但错过了通过.ipa文件分发应用程序时的连接性。

具有事件定时器的nod​​e.js可伸缩性(setTimeout)

我正在用node.js和socket.io构build一个基于回合的文本游戏。 每一回合都有一个超时时间,然后玩家失去回合并传递给下一个玩家。 我正在使用setTimeout函数,就像我在另一个问题中所说的那样。 问题是,我不知道如何扩展多个实例,也许多个服务器。 AIUI,如果我设置超时,我只能在同一个实例中清除它。 例如,如果一个玩家失去了轮回,例如,超时将被其他玩家轮stream更新,但是这个新玩家将不能访问该定时器对象来清除它,因为它正在第一个玩家的实例上运行。 我看了Redis的pub / subfunction(我将不得不使用它),但是我没有发现任何有关定时事件或延迟发布的内容。 TL; DR,如何保持一个实例/服务器独立的定时器?

Redis在使用节点群集Socket.io时多次订阅

我正在使用socket.io实时发帖, stream正在更新实时,但问题是多次redis订阅发生,并在post中出现多次。 我正在使用node.js cluster module来创build多个节点集群。 这里是代码, worker.js var cluster = require('cluster'); var server = new Hapi.Server(config.port,view_options); var socketIO = require('socket.io'); var redis = require("socket.io/node_modules/redis"); var RedisStore = require('socket.io/lib/stores/redis'); var io = socketIO.listen(server.listener); var sub = redis.createClient(); sub.setMaxListeners(0); io.configure(function() { io.set('store', new RedisStore({ redisSub : sub })); io.set('transports', ['xhr-polling']); io.set('polling duration', '10'); }); if (cluster.isMaster) { […]

NodeJS可以正常使用IE浏览器,但Chrome,Firefox和Opera不稳定

我正在使用nodejs和socket.io在聊天系统上工作。 到目前为止,我的应用程序完全适用于Internet Explorer 10,但大多数情况下,我无法在Firefox或Chrome或Opera上发送消息(但是我仍然可以读取Chrome / Firefox / Opera中的IE发送的消息)。 我所有的浏览器都更新到最新版本,没有任何插件/扩展。 我也尝试了几个不同的自由港,但没有任何结果。 我正在使用Windows 7环境,我所有的testing都是在本地完成的。 我不知道什么地方出了问题,在过去的几个小时里一直在挠头,却什么都没有想到。 我是新的node.js所以请帮助! 编辑:我试图通过使用io.set('transports',['websocket'])强制传输到websocket; 现在IE停止工作,所以它似乎之前的原因IE浏览器的工作是socket.io强制IE浏览器使用xhr轮询,而不是websocket。 我的代码如下(取自http://code.tutsplus.com/tutorials/real-time-chat-with-nodejs-socketio-and-expressjs-net-31708 ) 服务器index.js var express = require("express"); var app = express(); var port = 3700; app.set('views', __dirname + '/tpl'); app.set('view engine', "jade"); app.engine('jade', require('jade').__express); app.get("/", function(req, res){ res.render("page"); }); app.use(express.static(__dirname + '/public')); var io = require('socket.io').listen(app.listen(port)); console.log(port); console.log(io); io.sockets.on('connection', […]

socket.io如何检测客户端断开连接

我知道socket.io可以通过'disconnect'事件处理断开'disconnect' 。 我的问题是:当客户端closures网页时,如何在服务器端触发'disconnect'事件? 我的看法是:当客户端closures网页时, 'onunload'事件的callback会启动一个emit('disconnect') 。 我对吗 ? 谢谢 ! 编辑: 从learnBoost : 卸载时的同步断开连接默认为false:当浏览器卸载时,是否需要向服务器发送断开连接数据包? 也许,现在是默认情况下…我检查了代码,默认情况下仍然是false 。