2015-04-02 126 views
2

不是重复的:this question,因为我试图使用发布的链接作为答案来解决我的问题。模拟多个socket.io连接

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

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,我会避免池化行为,但它不起作用。难道我做错了什么? 我简化了循环顺便说一句,我实际上确保创建之间有一个延迟,以避免同步心跳。

想法?

回答

3

找到了答案,它是这样的:

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()函数,我们可以设置力的新的连接标志设置为true,避免池。简单!