使用websockets手动连接到socket.io 1.x,进行容量testing

我正在使用一个nodejs express服务器,它使用socket.io与iOS客户端进行通信,并且在尝试testing有多less客户端可以同时连接和交换数据时遇到了一些麻烦。

我的目标是能够运行一个脚本连接到socket.io与数千个不同的会话,以及发送和接收数据,以了解我们的系统的规模。 目前,我们在Heroku上使用单个testing仪,但很快可能会考虑AWS上的其他选项。

我发现代码应该做我正在尝试做的早期版本的socket.io,如此,但有问题,因为它似乎v1.x有一个非常不同的握手协议。 我尝试了使用socket.io-client包,但试图连接多次只模拟使用一个会话,我需要模拟许多独立的用户。

我一直在挑选的socket.io客户端代码,但只有得到创build一个连接 – 我卡在发送数据部分。 如果任何人有任何知识或可以指出一些关于如何在客户端和socket.io服务器之间发送数据的书面资源,它会帮助我很多。

以下是我到目前为止:

var needle = require('needle'), WebSocket = require('ws'), BASE_URL = 'url-to-socket-host:5002'; var connectionNo = 0; needle.get('http://' + BASE_URL + '/socket.io/?EIO=3&transport=polling&t=1416506501335-0', function (err, resp) { // parse the sid var resp = JSON.parse(resp.body.toString().substring(5, resp.body.toString().length)); // use the sid to connect using websockets var url = 'ws://' + BASE_URL + '/socket.io/?EIO=3&transport=websocket&sid=' + resp.sid; console.log(connectionNo + ' with sid: ' + resp.sid); var socket = new WebSocket(url, void(0), { agent: false }); socket.on('open', function () { console.log('Websocket connected: ' + connectionNo); // I don't understand how to send data to the server here, // from looking at the source code it should use some kind // of binary encoding, any ideas? socket.on('message', function (msg) { console.log(msg); }); }); }); 

我将继续解构socket.io客户端代码,但是如果任何人有任何可能帮助的线索或资源,请告诉我。 谢谢。

我最终设置使用socket.io客户端npm包有能力连接到每个连接上的新会话。 我在这个问题上find了一个示例基准。

我没有太多需要使用纯websockets和HTTP手动连接到socket.io,但是感谢Yannik指出正在使用的分析器 。 v1.x的内部工作规范可以在这里find。

谢谢!

我的问题在于你没有在客户端代码中使用socket.io。 你已经导入('ws')这是另一个模块的文档在这里: https : //www.npmjs.org/package/ws 。

你可能想要ws.send('something'); 。 当你在ws中接收到一个消息时,它还会附带一个带有属性的对象,指示它是否是二进制数据。 如果是,则需要逐步连接块。 有一个规范的方式来做到这一点,你可以通过谷歌find。 但看起来有点像这样:

 var message; socketConnection.on('data', function(chunk){ message += chunk});