【问题标题】:simulate multiple socket.io connection模拟多个socket.io连接
【发布时间】:2015-04-02 22:59:33
【问题描述】:

不重复:this question,因为我正在尝试使用发布的链接作为答案来解决我的问题。

我正在创建一个小虚拟套接字客户端来帮助测试我的一个产品,它看起来像这样:

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());
};

似乎池连接并仅显示为一个客户端。 基于this link,我认为通过使用socket.io-client,我可以避免池化行为,但它不起作用。难道我做错了什么? 顺便说一句,我已经简化了循环,实际上我确保创建之间存在延迟以避免同步心跳。

想法?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    找到答案了,是这样的:

    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 并避免池化。简单!

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 2011-11-05
      • 2021-02-26
      • 2016-09-15
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多