Я пытаюсь настроить HTTP2 для приложения Express, которое я создал. Как я понимаю, Express не поддерживает модуль NPM http2, поэтому я использую SPDY. Вот как я собираюсь это сделать - я буду благодарен советам людей, которые реализовали нечто подобное.
1) Настройка сервера - я хочу обернуть мое существующее приложение SPDY, чтобы сохранить существующие маршруты. Опции - это просто объект с ключом и сертификатом для SSL.
const app = express();
...all existing Express stuff, followed by:
spdy
.createServer(options, app)
.listen(CONFIG.port, (error) => {
if (error) {
console.error(error);
return process.exit(1)
} else {
console.log('Listening on port: ' + port + '.')
}
});
2) На данный момент я хочу улучшить некоторые из моих существующих маршрутов условным ответом PUSH. Я хочу проверить, есть ли какие-либо обновления для клиента, выполняющего запрос к маршруту (клиент называется конечной точкой, а обновления представляют собой массив объектов JSON, называемых изменениями конечной точки), и, если это так, нажмите на клиент ,
Моя идея состоит в том, что я напишу функцию, которая принимает res в качестве одного из своих параметров, сохранит изменения конечной точки в виде файла (я не нашел способа передать не файловые данные) и затем добавлю их в нажмите поток, затем удалите файл. Это правильный подход? Я также заметил, что есть второй параметр, который принимает поток, который является объектом req / res - правильно ли я его форматирую здесь?
const checkUpdates = async (obj, res) => {
if(res.push){
const endpointChanges = await updateEndpoint(obj).endpointChanges;
if (endpointChanges) {
const changePath = `../../cache/endpoint-updates${new Date().toISOString()}.json`;
const savedChanges = await jsonfile(changePath, endpointChanges);
if (savedChanges) {
let stream = res.push(changePath, {req: {'accept': '**/*'}, res: {'content-type': 'application/json'}});
stream.on('error', function (err) {
console.log(err);
});
stream.end();
res.end();
fs.unlinkSync(changePath);
}
}
}
};
3) Затем в моих маршрутах я хочу вызвать метод checkUpdates с соответствующими параметрами, например:
router.get('/somePath', async (req, res) => {
await checkUpdates({someInfo}, res);
ReS(res, {
message: 'keepalive succeeded'
}, 200);
}
);
Это правильный способ реализации HTTP2?