Skip to content

Instantly share code, notes, and snippets.

@addisonj
Created May 20, 2014 03:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save addisonj/423903439078c3c5c109 to your computer and use it in GitHub Desktop.
Save addisonj/423903439078c3c5c109 to your computer and use it in GitHub Desktop.
var net = require("net")
var LZ = require("lazy-socket")
var port = process.env.PORT || 3000
var hosts = process.argv.slice(0).splice(2)
if (hosts.length === 0) {
console.log("you must pass at least one host to pass traffic too")
process.exit(1)
}
hosts = hosts.map(function(h) {
var parts = h.split(":")
if (parts.length !== 2) {
console.log("you must pass hosts of ip:port (or host:port), for this too work")
process.exit(1)
}
return {
host: parts[0],
port: parts[1]
}
})
console.log("dividing lines between " + hosts.map(function(h) { return h.host + ":" + h.port }).join(","))
var conns = hosts.map(function(host) {
return LZ.createConnection(host.port, host.host)
})
function chooseSockFromArr(conns) {
var r = Math.floor(Math.random() * conns.length)
return conns[r]
}
var chooseSock = chooseSockFromArr.bind(null, conns)
var server = net.createServer(function(c) {
c.on("data", function(d) {
var sock = chooseSock()
sock.write(d, function(err) {
if (err) {
console.log("the socket to " + sock.host + ":" + sock.port + " closed, should reponen!")
}
})
})
})
server.listen(port, function() {
console.log("listening on " + port)
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment