Как разрешить чтение файлов ключей и сертификатов только один раз?
Используйте тот факт, что requires
кэширует модули, и используйте промежуточные модули для раскрытия ваших ключей. Что-то вроде:
// keys.js
const { readFileSync } = require('fs');
exports.key = fs.readFileSync('key.pem');
exports.cert = fs.readFileSync('cert.pem');
// elsewhere
const { key, cert } = require('path/to/keys.js');
Обратите внимание, что это полезно только для замены многих чтений файлов ssl одним чтением файла. В случае, если вы упомянули, ssl-файлы читаются один раз, поэтому кеширования на самом деле не нужно.
Есть ли способ или смысл сделать это неблокирующим?
Да, используйте readFile
вместо readFileSync
. Опять же, это не даст существенного прироста производительности в вашем конкретном случае, но вы можете выполнить рефакторинг файла сервера руководства следующим образом:
const fs = require('fs');
const https = require('https');
// use promises rather than callbacks, for a simpler code
const { promisify } = require('utils');
const readFilePromise = promisify(fs.readFile);
// wrap everything in an IIFE
(async () => {
// read both files at once, in a non-blocking way
const [ key, cert ] = await Promise.all([
readFilePromise('key.pem'),
readFilePromise('cert.pem'),
]);
// create https server as usual
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
})();