模拟多个socket.io连接

3
不是这个问题的重复: 这个问题,因为我正在尝试使用作为答案发布的链接来解决我的问题。 我正在创建一个小型虚拟套接字客户端来帮助测试我的某个产品,它看起来像这样:
var ee = require('events').EventEmitter;
require('http').globalAgent.maxSockets = 1000;

function Dummy(){
    this.config = require('../config/credentials.js');
    this.socket = require('socket.io-client')(this.config.socketIO.url);
    var self = this;
    this.socket.on('task', function(task) {
        self.createTask(task);
    });
}

util.inherits(Dummy, ee);
module.exports = Dummy;

Dummy.prototype.createTask = function(name){
    var self = this;
    setInterval(function sendStuff(){
            self.socket.emit("msg")
    }, 1000);
};

它本身运行良好;但是当我尝试像这样启动许多个时:

for (var i = 0; i < 100; i++) {
    fakeClients.push(new Dummy());
};

看起来它似乎将连接汇集在一起,只显示一个客户端。

根据这个链接,我以为使用socket.io-client可以避免汇集行为,但是它并没有起作用。我做错了什么吗?顺便说一下,我已经简化了循环,确保在创建之间有延迟以避免同步心跳。

有什么想法吗?

1个回答

5

找到答案了,答案如下:

function Dummy(){
    this.config = require('../config/credentials.js');
    this.socket = require('socket.io-client').connect(this.config.socketIO.url, { "force new connection": true });
    var self = this;
    this.socket.on('task', function(task) {
        self.createTask(task);
    });
}

通过使用connect()函数,我们可以将force new connection标志设置为true并避免连接池。简单易懂!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接