-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathloadbalancer.js
44 lines (38 loc) · 1.04 KB
/
loadbalancer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var httpProxy = require('http-proxy');
var http = require('http');
var proxy = httpProxy.createProxyServer();
var fs = require('fs');
var PORT_DEFAULT = "80";
function readIps(callback) {
fs.readFile(__dirname + '/../ips.txt', 'utf8', function(err, ips) {
if (err) {
callback(err, null);
}
var arrayIps = ips.split("\n");
if (arrayIps.indexOf("")) {
arrayIps.splice(arrayIps.indexOf(""), 1);
}
console.log(arrayIps);
callback(null, arrayIps);
});
}
function randomUrl(callback) {
readIps(function(err, ips) {
if (err) {
callback(err, null);
}
callback("http://" + ips[Math.floor(Math.random() * ips.length)] + ":" + PORT_DEFAULT);
});
}
var server = http.createServer(function (req, res) {
randomUrl(function(url) {
proxy.web(req, res, { target: url });
});
});
server.on('upgrade', function (req, socket, head) {
randomUrl(function(url) {
proxy.ws(req, socket, head, { target: url });
});
});
server.listen(80);
console.log("Load Balancer escutando na porta 80!");