Articles of websocket

我怎样才能有效地加载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%的时间内解决问题,而重启节点服务不会,这导致我相信这是与服务器上的开放套接字有关的问题。

如何使用ONLY节点连接到Clover mini设备?

我对Node相当陌生,而且我试图通过使用Clover提供的API的websocket连接到Clover Mini设备。 我已经尝试修改下面的示例代码来使用只有节点,但是当我在节点中打开它没有任何反应。 (没有错误,没有任何反应) 它在Chrome中工作得很好,所以缺less什么? https://github.com/clover/remote-pay-cloud var $ = require('jQuery'); var clover = require("remote-pay-cloud"); var log = clover.Logger.create(); var connector = new clover.CloverConnectorFactory().createICloverConnector({ "oauthToken": "1e7a9007-141a-293d-f41d-f603f0842139", "merchantId": "BBFF8NBCXEMDV", "clientId": "3RPTN642FHXTX", "remoteApplicationId": "com.yourname.yourapplication:1.0.0-beta1", "deviceSerialId": "C031UQ52340015", "domain": "https://sandbox.dev.clover.com/" }); var ExampleCloverConnectorListener = function(cloverConnector) { clover.remotepay.ICloverConnectorListener.call(this); this.cloverConnector = cloverConnector; }; ExampleCloverConnectorListener.prototype = Object.create(clover.remotepay.ICloverConnectorListener.prototype); ExampleCloverConnectorListener.prototype.constructor = ExampleCloverConnectorListener; ExampleCloverConnectorListener.prototype.onReady = function […]

Sec-WebSocket-Accept值的Base64编码

前段时间,我开始尝试用Node.js来处理后端的WebSockets。 它工作正常,但现在当我返回协议已更新,我不能得到它正常工作了。 具体来说,问题是Sec-WebSocket-Accept头。 在计算时,我似乎做错了什么,尽pipe我不能真正理解那可能是什么。 据我所知,我遵循维基百科上的指示 。 这是我的代码: var magicString = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; var secWsKey = req.headers['sec-websocket-key']; var hash = require('crypto') .createHash('SHA1') .update(secWsKey + magicString) .digest('hex'); var b64hash = new Buffer(hash).toString('base64'); var handshake = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" + "Upgrade: WebSocket\r\n" + "Connection: Upgrade\r\n" + "Sec-WebSocket-Accept: " + b64hash + "\r\n" + "\r\n"; socket.write(handshake); 一个示例连接: […]

在Socket.IO中使用dgram(UDP)时,数据报发送的速度是多less? (节点)

我使用socket.io和dgram节点库从一个程序通过节点发送UDP消息到浏览器。 代码看起来就像socket.io示例 var dgram = require("dgram"); var dServer = dgram.createSocket("udp4"); dServer.bind(12345, '0.0.0.0'); var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { dServer.on("message", function (msg) { socket.send('message', msg); }); }); 我的问题是数据报最终被发送到浏览器的速度是多less? 它们是以TCP速度,networking套接字速度(我知道速度较慢)还是UDP速度(我知道在实时通信中速度更快)发送的。 另外,在这个例子中,io在端口80上永久监听(意味着它只能以http / tcp速度接收内容),还是只是监听build立套接字连接,然后停止监听(并让套接字连接接pipe)

wss上的WebSocket连接失败

我已经购买了一个证书,并安装在我的node.js网站。但在浏览器的HTTPS显示绿色,是OK.Now,我试图build立一个套接字连接使用WSS,但它失败了。 在Javascript客户端的错误是这样的。 WebSocket connection to 'wss://securedsitedotcom:3003/call' failed: WebSocket opening handshake was canceled 请帮忙! 客户端代码(Javascript) var ws = new WebSocket('wss://securedsitedotcom:3003/call'); 在服务器端的代码(node.js) https = require('https'); var server = https.createServer({ key: fs.readFileSync(config.certKeyPath), cert: fs.readFileSync(config.certCrt), requestCert: true, rejectUnauthorized: false },app); server.listen(port); var wss = new ws.Server({ server: server, path: '/call' }); 浏览器控制台错误: WebSocket connection to 'wss://securedsitedotcom:3003/call' failed: WebSocket opening […]

Socket.IO:XHR轮询延迟断开连接

我正在使用socket.io和node.js。 我在跟踪哪些用户在线时遇到了问题,因为在socket IO识别出XHR-Polling客户端已断开连接之前的几秒钟的延迟。 如果XHR轮询客户端刷新页面,则他们的新连接消息似乎在其断开连接消息之前。 当试图跟踪哪些用户在线时会造成混淆。 一种解决scheme可能是检测服务器端的传输方法,并延迟XHR轮询客户端的连接,以确保断开连接function先运行。 有没有人有这方面的经验?

Socket.io用于实时应用程序

所以我有几个月前build立的另一个项目。 它目前使用jQuery和Ajax,每30秒调用一次php脚本。 php脚本查询mysql并返回结果显示。 在这个应用程序中,这个人有能力添加/编辑/从数据库中删除logging,当他们从数据库的结果列表需要更新他们看到的列表。 到目前为止,这似乎是工作,但是往下看,数据库将变得更大,并且需要实时更多,这意味着不仅每30秒刷新一次,而且尽可能瞬间更新。 socket.io会是这个答案吗? 我会简单地使用socket.io与nodejs来创build一个服务器,并发出事件来查询我的分贝,并返回结果显示? 那么在客户端就有一个像每秒一样调用服务器套接字脚本的函数? 这是否是使用socket.io的正确途径? 如果这样的话,如果我在服务器资源方面每秒都运行一次,那么这个过程会有一个问题吗?

通过WebSocket连接发送HTML是不好的做法

我正在使用MongoDB数据库在Node.js中开发一个小应用程序,前面有nginx来处理静态文件和最初的index.html。 当我访问我的index.html所有javascript / css / img文件被加载,并且一个websocket连接到node.js服务器。 最初我的index.html是空的,它需要填写正确的模板文件。 我能做的一件事就是做一个正常的Ajax请求。 $ .get('myfile.html')并将其附加到我的内容。 websocket只处理数据库数据。 现在我已经有了一个开放的websocket连接服务器,为什么不把这个.html模板和数据库中的数据一起传输,然后把它合并到客户端。 模板文件只是很less的HTML片段,为什么浪费一个HTTP请求,对吗? 请注意,这个应用程序将只有有select的人有完整的HTML5浏览器支持。 不需要回退的情况。