keepalive sockets

This commit is contained in:
yawnt 2013-09-14 22:52:22 +02:00
parent 63b016c8ef
commit dad211e71c
4 changed files with 64 additions and 0 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ node_modules
cov cov
atest.js atest.js
notes notes
prismus-proxy.js

View File

@ -33,3 +33,12 @@ common.setupOutgoing = function(outgoing, options, req, forward) {
return outgoing; return outgoing;
}; };
common.setupSocket = function(socket) {
socket.setTimeout(0);
socket.setNoDelay(true);
socket.setKeepAlive(true, 0);
return socket;
};

View File

@ -72,11 +72,15 @@ function XHeaders(req, socket, options) {
* *
*/ */
function stream(req, socket, options, head) { function stream(req, socket, options, head) {
common.setupSocket(socket);
var proxyReq = http.request( var proxyReq = http.request(
common.setupOutgoing(options.ssl || {}, options, req) common.setupOutgoing(options.ssl || {}, options, req)
); );
proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) { proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {
common.setupSocket(proxySocket);
if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead); if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead);
socket.write('HTTP/1.1 101 Switching Protocols\r\n'); socket.write('HTTP/1.1 101 Switching Protocols\r\n');

50
primus-proxy.js Normal file
View File

@ -0,0 +1,50 @@
var http = require('http');
var caronte = require('./');
var Primus = require('primus');
var server = http.createServer(function (req, res) {
res.writeHead(500);
res.end('Not Implemented\n');
});
var primus = new Primus(server, { transformer: 'engine.io' });
var Socket = primus.Socket;
primus.on('error', function (err) {
console.log('Primus ' + err);
});
primus.on('connection', function (spark) {
spark.write({ from: 'server', to: 'client' });
spark.on('data', function (data) {
console.dir(data);
});
});
primus.on('disconnection', function (spark) {
console.log('disconnected');
});
server.listen(9000);
var proxy = caronte.createProxyServer({
ws: true,
target: 'http://localhost:9000'
});
var srv = proxy.listen(3000);
var socket = new Socket('http://localhost:3000');
socket.on('reconnecting', function () {
console.log('reconnecting');
});
socket.on('open', function () {
socket.write({ from: 'client', to: 'server' })
});
socket.on('data', function (data) {
console.dir(data);
});