server.js (2042B)
1 var fs = require('fs'); 2 var path = require('path'); 3 var http2 = require('..'); 4 5 // We cache one file to be able to do simple performance tests without waiting for the disk 6 var cachedFile = fs.readFileSync(path.join(__dirname, './server.js')); 7 var cachedUrl = '/server.js'; 8 9 // The callback to handle requests 10 function onRequest(request, response) { 11 var filename = path.join(__dirname, request.url); 12 13 // Serving server.js from cache. Useful for microbenchmarks. 14 if (request.url === cachedUrl) { 15 if (response.push) { 16 // Also push down the client js, since it's possible if the requester wants 17 // one, they want both. 18 var push = response.push('/client.js'); 19 push.writeHead(200); 20 fs.createReadStream(path.join(__dirname, '/client.js')).pipe(push); 21 } 22 response.end(cachedFile); 23 } 24 25 // Reading file from disk if it exists and is safe. 26 else if ((filename.indexOf(__dirname) === 0) && fs.existsSync(filename) && fs.statSync(filename).isFile()) { 27 response.writeHead(200); 28 var fileStream = fs.createReadStream(filename); 29 fileStream.pipe(response); 30 fileStream.on('finish',response.end); 31 } 32 33 // Example for testing large (boundary-sized) frames. 34 else if (request.url === "/largeframe") { 35 response.writeHead(200); 36 var body = 'a'; 37 for (var i = 0; i < 14; i++) { 38 body += body; 39 } 40 body = body + 'a'; 41 response.end(body); 42 } 43 44 // Otherwise responding with 404. 45 else { 46 response.writeHead(404); 47 response.end(); 48 } 49 } 50 51 // Creating a bunyan logger (optional) 52 var log = require('../test/util').createLogger('server'); 53 54 // Creating the server in plain or TLS mode (TLS mode is the default) 55 var server; 56 if (process.env.HTTP2_PLAIN) { 57 server = http2.raw.createServer({ 58 log: log 59 }, onRequest); 60 } else { 61 server = http2.createServer({ 62 log: log, 63 key: fs.readFileSync(path.join(__dirname, '/localhost.key')), 64 cert: fs.readFileSync(path.join(__dirname, '/localhost.crt')) 65 }, onRequest); 66 } 67 server.listen(process.env.HTTP2_PORT || 8080);