tenfourfox/testing/xpcshell/node-http2/example/server.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

56 lines
1.7 KiB
JavaScript

var fs = require('fs');
var path = require('path');
var http2 = require('..');
// We cache one file to be able to do simple performance tests without waiting for the disk
var cachedFile = fs.readFileSync(path.join(__dirname, './server.js'));
var cachedUrl = '/server.js';
// The callback to handle requests
function onRequest(request, response) {
var filename = path.join(__dirname, request.url);
// Serving server.js from cache. Useful for microbenchmarks.
if (request.url === cachedUrl) {
if (response.push) {
// Also push down the client js, since it's possible if the requester wants
// one, they want both.
var push = response.push('/client.js');
push.writeHead(200);
fs.createReadStream(path.join(__dirname, '/client.js')).pipe(push);
}
response.end(cachedFile);
}
// Reading file from disk if it exists and is safe.
else if ((filename.indexOf(__dirname) === 0) && fs.existsSync(filename) && fs.statSync(filename).isFile()) {
response.writeHead('200');
fs.createReadStream(filename).pipe(response);
}
// Otherwise responding with 404.
else {
response.writeHead('404');
response.end();
}
}
// Creating a bunyan logger (optional)
var log = require('../test/util').createLogger('server');
// Creating the server in plain or TLS mode (TLS mode is the default)
var server;
if (process.env.HTTP2_PLAIN) {
server = http2.raw.createServer({
log: log
}, onRequest);
} else {
server = http2.createServer({
log: log,
key: fs.readFileSync(path.join(__dirname, '/localhost.key')),
cert: fs.readFileSync(path.join(__dirname, '/localhost.crt'))
}, onRequest);
}
server.listen(process.env.HTTP2_PORT || 8080);