node.js - 使用 websockets 手动连接到 socket.io 1.x,容量测试

标签 node.js sockets heroku socket.io

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

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

我找到了应该可以为早期版本的socket.io 做的事情的代码,例如 this ,但遇到了问题,因为 v1.x 似乎有一个非常不同的握手协议(protocol)。我尝试使用 socket.io-client包,但尝试多次连接只能模拟一个 session 的使用,我需要在独立用户中模拟许多次。

我一直在拆解 socket.io-client 代码,但只创建了一个连接 - 我陷入了发送数据部分。如果有人有任何知识或可以指出一些有关如何在客户端和 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-client 代码,但如果有人有任何可能有帮助的线索或资源,请告诉我。谢谢。

最佳答案

我最终设置使用 socket.io-client npm 包,它能够在每个连接上连接到新 session 。我在 this issue 中找到了一个示例基准测试.

我不需要使用纯 websockets 和 HTTP 手动连接到 socket.io,但感谢 Yannik 指出 parser正在使用。 v1.x 内部工作原理可以在 here 找到。 .

谢谢!

关于node.js - 使用 websockets 手动连接到 socket.io 1.x,容量测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167387/

相关文章:

mysql - Node Sequelize with Mysql order by,最后需要空值

node.js - 错误: Cannot find module '../lib/utils/unsupported.js' on window10

javascript - import App from '../components/App' 和有什么区别?和 var App = require ('../components/App' );?

java - 软件电话/voip上有任何源代码或教程吗?

c++ - 在阻塞模式下从套接字读取所有可用字节的最佳方式,C++

mysql - 如何将多个对象传递到单个 Handlebars 页面/模板中

javascript - Node ,socket.io - 当新条目添加到新闻提要时更新客户端?

python - 为什么这些 apt-packages 在 Ubuntu 和 Heroku 上表现不一样?

ruby-on-rails - Heroku Rails 4 设计错误

ruby-on-rails-3 - Twitter Bootstrap 图标不适用于 Amazon S3 和 Heroku(使用 asset_sync gem)