Skip to content

Instantly share code, notes, and snippets.

@leeoniya
Created October 14, 2013 16:28
Show Gist options
  • Save leeoniya/6978336 to your computer and use it in GitHub Desktop.
Save leeoniya/6978336 to your computer and use it in GitHub Desktop.
TCP pooling proxy for Node.js
var net = require('net');
function TcpPool() {
this.socks = {};
}
TcpPool.prototype.send = function(host, port, endpt, data, respFn) {
var pool = this,
str = "tcp://" + host + ":" + port + endpt;
if (str in pool.socks) {
var sock = pool.socks[str];
sock.once("data", respFn);
sock.write(data);
}
else {
var sock = new net.Socket({
allowHalfOpen: true,
});
var tout = 30 * 1000;
sock.setTimeout(tout, function() {
sock.end();
});
sock.once("connect", function() {
sock.write(data);
});
sock.once("data", respFn);
sock.on("close", function() {
delete pool.socks[str];
});
sock.on("error", function(e) {
console.log(e);
});
sock.connect(port, host);
pool.socks[str] = sock;
}
};
var pool = new TcpPool();
var server = net.createServer(function(sock) {
sock.on("data", function(data0) {
var data = JSON.parse(data0);
data[3] = new Buffer(data[3]);
data[4] = function(rdata) {
var json = JSON.stringify(rdata);
sock.write(json + "\n");
};
pool.send.apply(pool, data);
});
sock.on("error", function(e) {
console.log(e);
});
});
server.listen(5000, '127.0.0.1');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment