2015-04-02 125 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,避免池。簡單!