模拟多个 socket.io 连接
simulate multiple socket.io connection
不是 : this question 的副本,因为我正在尝试使用发布的 link 作为答案来解决我的问题。
我正在创建一个小的虚拟套接字客户端来帮助测试我的一个产品,它看起来像这样:
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,我可以避免池行为,但它不起作用。难道我做错了什么?
顺便说一句,我已经简化了循环,我实际上确保创建之间存在延迟以避免同步心跳。
想法?
找到了答案,它是这样的:
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 并避免池化。简单!
不是 : this question 的副本,因为我正在尝试使用发布的 link 作为答案来解决我的问题。
我正在创建一个小的虚拟套接字客户端来帮助测试我的一个产品,它看起来像这样:
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,我可以避免池行为,但它不起作用。难道我做错了什么? 顺便说一句,我已经简化了循环,我实际上确保创建之间存在延迟以避免同步心跳。
想法?
找到了答案,它是这样的:
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 并避免池化。简单!