2013-11-12 6 views
0

Я видел несколько примеров, где мы можем создать сервер Node.js HTTPS на код ниже:Синхронное чтение файла с HTTPS в Node.js сервере

var https = require('https'); 

https.createServer({ 
    key: fs.readFileSync('/path/to/something.key'), 
    cert: fs.readFileSync('/path/to/something.crt'), 
}, app).listen(443); 

Требуется ли здесь использовать readFileSync? Будет ли он задерживать запрос для каждого пользователя до тех пор, пока ключ и сертификат не будут прочитаны? Немного смущен синхронный и асинхронный в этом контексте.

ответ

2

Не требуется использовать синхронные чтения при создании экземпляра HTTP-сервера, просто удобнее, и файлы нужно читать только один раз, когда создается экземпляр сервера.

Например, вы могли бы также сделать следующее, но это довольно бессмысленно делать это и сделает ваш код менее читаемым:

var fs = require('fs'); 
var https = require('https'); 

fs.readFile('/path/to/something.key', function(err, key) { 
    fs.readFile('/path/to/something.cert', function(err, cert) { 
    https.createServer({ 
     key: key, 
     cert: cert 
    }, app).listen(443); 
    }); 
}); 

Где вы должны смотреть, как вещи обрабатываются в пределах запроса HTTP обработчик, который является функцией, которая запускается каждый раз, когда сервер получает запрос. Если вы должны были блокировать сервер так:

https.createServer(function(req, res) { 
    // block the thread with something synchronous 
    res.end(); 
}).listen(443); 

Один запрос будет получен, и сервер не будет принимать какие-либо запросы до тех пор, блокирующая операция не была завершена.

+0

Здравствуйте, Благодарим за ответ. Итак, эта часть для создания сервера выполняется только один раз, когда мы запускаем сервер? и после этого другой запрос от клиента не проходит через эту часть и просто переходит к маршрутизации? Так, например, на экспресс-сервере мы можем делать любые синхронные файлы, например, для чтения файлов конфигурации. все, что нам нужно позаботиться о блокировании кодов, находится внутри маршрутизации? например: 'app.get ('/', function (req, res) { // здесь? });' – Yalamber

+0

Да, внутри маршрутизации и промежуточного программного обеспечения. Установка и так выполняется только один раз. Это похоже на 'require()', который является синхронным, но должен выполняться только один раз. – hexacyanide

+0

Ничего себе, я совершенно не понимал логику здесь, огромное спасибо hexacyanide. чувство noob: D – Yalamber

Смежные вопросы