Кэшируйте файлы SSL с readFileSyn c в узле, а не читайте их каждый раз - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь настроить SSL на своем узле и следую этому руководству здесь. Теперь, согласно примечанию,

"fs.readFileSyn c будет блокировать весь процесс, пока он не завершится" каким-то образом, а затем считывать их автоматически из кеша, чтобы весь процесс стал быстрее?

Кроме того, есть ли способ или какой-либо смысл сделать эту неблокирующую?

Спасибо

1 Ответ

1 голос
/ 05 марта 2020

Как разрешить чтение файлов ключей и сертификатов только один раз?

Используйте тот факт, что 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);

})();
...