Проблема:
В настоящее время я использую socket.io
(на стороне сервера) для обработки асинхронных запросов от клиента.Эти запросы передаются в вышестоящую службу, которая является достаточно дорогой / медленной и с ограниченной скоростью.Я хотел бы демультиплексировать / кэшировать вызовы к восходящему сервису. например, 10x вызовов для getUserProfile(123)
=> 1x вызовов восходящей службы (в течение определенного периода времени)
Я пытался использовать кэш ( lru-cache ), однако от клиента поступает несколько вызовов (в течение миллисекунд) до получения ответа от вышестоящего сервера (для первого вызова - так что это не работает).
Библиотека debounce-обещания звучит как то, что мне нужно, однако она не учитывает различные параметры ( например getUserProfile(123)
и getUserProfile(456)
=>ожидая profile_123
и profile_456
, однако возвращает profile_456
(дважды).
Вероятно, лучше, если я приведу пример ...
server.js
// on request from client...
socket.on('getUserProfileRequest', userId => {
getUserProfile(userId).then(profile => socket.emit('getUserProfileResponse', profile))
})
...
function getUserProfile(userId) {
// ... call upstream server, do async work, return a Promise...
}