Articles of websocket

与engine.io的Nodejs服务器/客户端套接字连接

我正试图得到一个简单的套接字连接之间build立一个engine.io套接字监听器是监听端口8888和一个javascript客户端运行在一个普通的index.html 它看起来相当直接的完成这项任务,但不知何故,我无法得到一个xhr轮询客户端正确连接。 它连接,因为客户端号码增加,但onopen事件永远不会在客户端触发。 相反,服务器端的客户端数量不断增加,客户端永远不会收到来自服务器的任何消息 – 服务器也不会从客户端收到任何消息。 这一切都与websocket运输完美,但我需要xhr-polling工作以及。 app.js var engine = require('engine.io'); var server = engine.listen(8888); server.on('connection', function (socket) { console.log(server.clientsCount); socket.send('never received by client'); // << xhr-polling client does not receive socket.on('message', function (msg) { if ('echo' == msg) socket.send(msg); }); }); 的index.html <html> <head> <script src="engine.io.js"></script> <script> var socket = eio('ws://localhost:8888/'); << starts […]

Socket.io作为负载平衡器

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

当客户端尝试使用旧协议设置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如何检测客户端断开连接

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

Socket.io不发送消息给XHR客户端

好的,我有一个运行Socket.io的Node.js服务器。 它使用RedisStore,所以我可以有多个Node.js服务器实例。 一切正常,因为我不能从服务器发送消息到我的XHR轮询客户端的例外。 它在以下情况下运行良好: 在Chrome中testing客户端并使用Websockets时,效果很好。 连接到同一个节点服务器实例时。 因为我使用RedisStore,所以它应该工作,不pipe它在哪个实例上。

socket.io在241个客户端ENOTFOUND

我正在尝试对我的socket.io服务器进行基准testing,当我注意到一旦build立了241个并发连接,客户端就收到ENOTFOUND错误。 但是,我正在阅读其他网站上关于1000多个客户端的并发。 我正在使用一台3GHz和16GB RAM的机器进行testing,这个机器几乎没有使用。 所以我不确定为什么连接失败。 有谁知道为什么服务器不再那么快? 我正在使用节点:v0.10.28和socket.io:0.9.17 { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo', target: { _socket: null, bytesReceived: 0, readyState: 0, supports: { binary: true }, _isServer: false, url: 'ws://localhost:3001/socket.io/1/websocket/FvzSa7LmLu0Toi7F6OZF', protocolVersion: 13, _events: { open: [Object], message: [Object], close: [Object], error: [Object] } } }

如何closuressocket.io 1.0中的服务器?

有一些这样的,但他们是以前版本的图书馆。 看来代码已经改变了。 我正在实例化一个套接字,如下所示: this.socketLib || (this.socketLib = require('socket.io')); this.socket = this.socketLib.listen(this.port); 在对象的其他地方,我有一个closuresfunction。 我试过以下closures套接字: this.socket.close() # TypeError: Object #<Server> has no method 'close' this.socket.server.close() # TypeError: Object #<Server> has no method 'close' this.socket.server.disconnect() # TypeError: Cannot call method 'disconnect' of undefined this.socket.disconnect() # TypeError: Object #<Server> has no method 'disconnect' this.socket.io.engine.close() # TypeError: Cannot read property […]

在node.js中运行websocket-rails javascript客户端

我试图从我的web服务器从websocket检索数据。 远程主机上的websocket服务器运行websocket-rails。 从Websocket-rails github项目页面( https://github.com/websocket-rails )我使用javascript客户端代码将一个web套接字客户端放在一个html文件中。 也就是说,我将github上的/ lib / assets / javascripts / websocket_rails中的所有CoffeeScript文件的内容复制到一个单独的文件中,然后用js2coffee.org进行编译(可能是更好的解决scheme,但是我可能是更好的解决scheme现在注意到)。 然后添加几行连接到远程Web套接字并订阅频道。 (通道部分实际上是为什么我使用WebSocket-rails客户端,而不是一个“正常”的Web套接字连接,因为我不知道如何通过一个“正常的”websocket连接连接后订阅一个通道)。 到现在为止还挺好。 当使用浏览器和下面的代码时,我可以从远程主机上的websocket连接到一个通道,并将消息发送到控制台。 <!DOCTYPE html> <meta charset="utf-8" /> <title>WebSocket Test</title> <script language="javascript" type="text/javascript"> (function() { var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) […]

简单的websocket例子中的Node.js内存泄漏

这是一个简单的“server.js”脚本,似乎是泄漏内存…. var maxMem = 0; var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({port: 8080}); wss.on('connection', function(ws) { ws.on('close', function() { global.gc(); var mu = process.memoryUsage(); console.log("mem: " + mu.heapUsed); if (mu.heapUsed > maxMem) { maxMem = mu.heapUsed; console.log("*** new max: " + maxMem); } }); }); 这里是一个'client.js'脚本,简单地打开/closuresWebSockets之间短暂的延迟…. var WebSocket = require('ws'); function doCycle() { […]

Socket.io 1.0.6,nodejs CPU超过100%

我正在创build一个Web服务器来pipe理对活动数据的订阅。 这些数据通过TCPstream式传输到nodejs,然后stream式传输到使用Socket.io通过websockets订阅特定主题的客户端。 这是工作stream程。 客户端发送特定主题的订阅请求。 Nodejs应用程序将代理这个订阅到Java应用程序,然后开始通过TCP将数据推送到nodejs。 Java应用程序为每个可以侦听的新闻types启动9个不同的套接字连接,每个套接字一个类别 值得一提的是,这个数据可能是非常巨大的,因为当客户端订阅他们第一次获得历史数据(高达45MB),并且每个后续的推送包含一个小的增量。 我所遇到的问题是在初始推送nodejs应用程序中使用了超过100%的CPU。 起初,我认为这个问题是parsing正在发送给我的数据。 经过几天的debugging,我发现当注释掉socket.emit(data.topic, data) CPU会下降到1%-3%。 这使我相信,我遇到的问题是与socket.io。 我在这里误用socket.io吗? 有什么替代scheme可以推动不同的主题/渠道? 我的代码有什么问题吗? 感谢您的时间! //needed for REST subscribe services var app = require('express')() //needed for HTTP server , server = require('http').createServer(app) //WebSocket library (TODO see how to implement this) //, sockjs = require('sockjs') //backend subscriptions , subUtil = require('./subscriptions/subscriptionManager') , bodyParser = […]