Articles of socket.io

使用Express.js v4和Socket.io v1进行会话

如何在express.js中保存会话数据并在socket.io事件中访问它? 我正在使用express.js v4 , socket.io v1和基本的快速会话中间件来开发web应用程序。 我花了几个小时试图解决这个问题,但堆栈溢出的所有当前答案只适用于expressionv3和socket.io v0.9。 不幸的是,我不能使用express.io,因为它只是一个使用这些旧版本的包装器。 我目前的解决scheme是彻底的黑客攻击 app.get('/auth', function(req, res) { if(verified(req.query)) { authed[req.sessionID] = true; } }); io.sockets.on('connection', function(websocket) { var cookies = cookie.parse(websocket.handshake.headers.cookie); var decrypted = cookieParser.signedCookies(cookies, random); var sessionID = decrypted['connect.sid']; websocket.on('input', function(input) { if(authed[sessionID]) { // Do stuff… } }); }); 我将基于会话ID的“会话数据”保存在对象中作为键/值存储区。 这对于单个进程应用程序来说工作得很好,但它确实不是一个好的解决scheme。 它实际上并没有给我访问保存在req.session中的任何东西,如果过程结束,我保存的所有数据都将丢失。 最重要的是,我需要加载第三方的cookie包来parsing来自socket.io的cookiestring。 似乎新版本的Cookieparsing器没有使用它的函数来parsingstring中的cookie。 至less,没有logging。 有一个更好的方法! […]

Websocket(node.js)连接限制,客户端在达到400-450个连接后断开连接

我有一个与socket.io连接限制大问题。 如果连接数量超过400-450个连接的客户端 (通过浏览器)用户断开连接。 我增加了软硬限制的tcp,但它并没有帮助我。 这个问题只适用于浏览器。 当我尝试通过其他node.js服务器的socket-io-client模块进行连接时,我达到了5000个连接的客户端 。 对我来说这是一个非常大的问题,完全阻止了我。 请帮忙。 更新 我试过用标准的Websocket库(带有node.js的ws模块),问题相似。 我只能达到456个连接的客户端。 更新2 我在几个服务器实例之间分配连接的客户端。 每一个客户端都通过其他端口连接。 不幸的是,这个改变并没有帮助我。 关联用户总数与以前一样。

IOAcknowledge方法不适用于Android的SocketIO?

我正在使用socketio.jarbuild立客户端和服务器之间的连接。 即从我的Android设备(客户端)到节点服务器。 由于我能够成功连接,发送和接收消息到该服务器。 问题是为什么我没有从服务器发送消息后从套接字得到任何确认 。 有一个callBack接口IOAcknowledge作为参数,从来没有工作/为我调用。 socket.emit( "sendMessage", new IOAcknowledge() { @Override public void ack(Object… arg0) { System.out.println("sendMessage IOAcknowledge" + arg0.toString()); } }, "Hi!! how are you"); 有谁知道解决scheme何时或如何IOAcknowledge将工作? 编辑:我正在使用的套接字库的文档链接。 官方和Github

尝试运行node.js样板工程时,找不到模块“Socket.IO-node”

当我尝试运行一个用node.js样板工程创build的项目时,出现错误,我使用此命令使用NPM安装了socket.io: npm安装socket.io 我得到的错误是: node.js:189 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Cannot find module 'Socket.io-node' at Function._resolveFilename (module.js:317:11) at Function._load (module.js:262:25) at require (module.js:346:19) at Object.<anonymous> (/Users/mairead.buchan/Documents/WORK/auto-aggro/server.js:6:12) at Module._compile (module.js:406:26) at Object..js (module.js:445:10) at Module.load (module.js:334:31) at Function._load (module.js:293:12) at Array.<anonymous> (module.js:458:10) at EventEmitter._tickCallback (node.js:181:26) 我的问题是,我是否有某种不正确的节点/ socket.io版本的组合? (我知道socket.io已经达到了0.7)。 仅供参考我昨天做了一个编译从源节点(使用5.0),并已安装所有其他使用NPM今天所以它应该都在最新版本运行 […]

我怎样才能有效地加载testing与无头浏览器的Web应用程序?

我有几个无头浏览器的经验,但只用于testing和不加载testing。 什么是启动500-1000 websocket客户端加载testing应用程序的最佳方法? 这是简单的只是循环一堆setTimeout增加得更久? 我可以自己build立实际的testing,我只是好奇哪个框架最适合这个。 我有ZombieJS和PhantomJS(以及Casper和Webspecter)的经验。

node.js:代理websockets到其他端口

我在运行在端口80上的node.js中编写了http代理。我所需要的只是将socket.iostream量redirect到端口9090,并将标准httpstream量redirect到8080上的Apache。这是我的代理代码: httpProxy = require('http-proxy'); httpProxy.createServer(function (req, res, proxy) { if (req.url.match(/socket.io/)) { proxy.proxyRequest(req, res, { host: 'localhost', port: 9090 }); } else { proxy.proxyRequest(req, res, { host: 'localhost', port: 8080 }); } }).listen(80); 一切正常,但io.socket回落到xhr-polling。 http://localhost/client.htm – falls back to xhr-polling file:///C:/…/client9090.htm – still uses websocket socket.io应用程序在端口9090上运行,client.htm连接到80,而client9090.htm直接连接到9090。 它看起来像一个节点HTTP代理使socket.io应用程序在xhr轮询模式下工作。 客户端是Chrome v.25 socket.io应用程序代码 var io = require('socket.io').listen(9090); io.on('connection', […]

节点服务器运行数天后,socket.io变得缓慢且无响应

我一直在使用节点服务器上的socket.io为我的网站开发发布function。 过去一个月来,我一直在遇到问题,连接几天后套接字连接变得非常缓慢或完全没有响应。 服务器没有内存不足。 我对debugging这类问题还不是很熟悉。 在“websocket连接无效”或“客户端不握手”客户端应该重新连接之后,socket.io日志并没有告诉我多less“ 我search了一下,最终看到一个线程build议在命令行中运行netstat,并在FIN_WAIT2和CLOSE_WAIT中看到大量的连接,并认为这是我的问题的原因。 看了一些线程后,socket.io github相关的build议升级到分支0.9.14(我当时运行的是0.9.13)。 我从那以后就这样做了,当服务器连续运行几天后,我仍然有一段时间的“停机时间”。 我的网站没有得到任何附近的交通量,这应该是一个问题。 一个新的错误已经开始在我的日志中popup(websocketparsing器错误:操作码10没有处理程序),但是我的谷歌search已经在这个问题上蹲下了。 我不知道该怎么去解决这个问题,或者如果我只是在一个红色的鲱鱼,真正的问题是别人,你们中的一个人可以帮我解释一下。 我正在运行node.js v0.10.10并使用socket.io v0.9.14。 Linux服务器的硬重启将在100%的时间内解决问题,而重启节点服务不会,这导致我相信这是与服务器上的开放套接字有关的问题。

Azure移动服务和socket.io

我正在尝试创build一个HTML5 / JS应用程序,并为我的后端使用Azure移动服务。 基于ScottGu的post ,他演示了源代码控制和npm模块支持,我想知道是否可以使用socket.io来启用实时通知和使用WebSocket。 我可以看到如何能够引入模块,并为每个特定的请求使用它(例如,当一个客户端POSTS资源,添加一个钩子广播资源的创build到所有客户端),但我不确定如何设置并共享socket.io对象。 NB。 我知道对iOS,Windows和Google的基于推送的通知的内置支持,但是它还没有提供基于web的项目的开箱即用解决scheme – 因此想要使用socket.io(或任何SignalR-esque等效)。

在Heroku上使用cluster和socket.io-redis缩放node.js socket.io@1.*.*

有没有人知道一个很好的解决scheme来扩展一个基于node.js – socket.io的应用程序在多个核心? 我目前正在testingsocket.io文档中提供的解决scheme,以在多个节点上使用socket.io,但没有取得具体的成功。 我在github上创build了一个操作系统: https : //github.com/liviuignat/socket.io-clusters ,它是从socket.io站点修改的聊天应用程序的一个拷贝。 它使用express , cluster , socket.io@1.1.0和socket.io-redis 。 目前还有一个在分支feature/sticky使用sticky-session的实现,似乎更好。 最后,这个应用程序需要发布到Heroku ,并扩展到多个dynos。 最初我尝试做这样的事情 – 只为群集节点启动服务器,但我总是得到错误: 失败:连接closures之前收到握手响应 if (cluster.isMaster) { for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { var server […]

如何将video(从getUserMedia)发送到Node.js服务器?

我正在build立一个聊天/直播应用程序(video+文字聊天)。 目前我还没有解决办法,但是我正在向前迈进,而且我陷入困境。 我正在尝试使用getUserMedia获取videostream,并通过Socket.io将其发送到我的Node.js服务器。 到目前为止,我已经得到了bloburl: "mediastream:http://192.168.1.20:3000/1c267861-a2da-41df-9a83-ae69fdfd883b"但我不知道如何从它抓取数据通过套接字发送.IO。 任何帮助将摇滚。 服务器: // server.js var http = require('http'); var socketio = require('socket.io') var fs = require('fs'); var server = http.createServer(function (req, res) { if (req.url ==='/') { fs.readFile('index.html', function (err, html) { res.writeHeader(200, {"Content-Type": "text/html"}); res.write(html); return res.end(); }); } else { res.end('hi!'); } }); var io = socketio(server); server.listen(8000, […]