Я пытаюсь решить проблему, связанную с потоком отдыха между API-интерфейсом Nest и службой (ST), которая не поддерживает потоковую передачу.Завершить прослушиватель событий EventSource?
Чтобы обойти это, я создал службу на Sails, которая отправляет запрос от ST, содержащий токен Nest, а затем запускает прослушиватель событий EventSource, который отправляет данные обратно в ST.
Это в значительной степени основано от Nest покоя потокового примера здесь: https://github.com/nestlabs/rest-streaming и мой код выглядит следующим образом:
startStream: function(req, res) {
var nestToken = req.body.nestToken,
stToken = req.body.stToken,
endpointURL = req.body.endpointURL,
source = new EventSource(sails.config.nest.nest_api_url + '?auth=' + nestToken);
source.addEventListener('put', function(e) {
var d = JSON.parse(e.data);
var data = { devices: d.data.devices, structures: d.data.structures},
config = { headers : {'Authorization': 'Bearer ' + stToken}};
sendData(endpointURL, data, config);
});
source.addEventListener('open', function(e) {
console.log("Connection opened");
});
source.addEventListener('auth_revoked', function(e){
console.log("Auth token revoed");
});
source.addEventListener('error', function(e) {
if (e.readyState == EventSource.CLOSED) {
console.error('Connection was closed! ', e);
} else {
console.error('An unknown error occurred: ', e);
}
}, false);
}
};
Проблема, которую я предвижу, однако, что когда запрос получен сервером узла, он запускает прослушиватель событий, однако я не могу для жизни меня выяснить, как я могу убить слушателя событий.
Если я не могу найти способ остановить это, то каждый EventListener будет работать бесконечно, что явно не подходит.
Есть ли у кого-нибудь какие-либо предложения о том, как преодолеть эту проблему?
Чтобы проверить, что я понял: ваш слушатель событий «put» будет вызван только один раз? А после этого вам больше не нужен объект EventSource? –
Итак, у меня есть мой контроллер, как указано выше, доступ к которому может получить несколько тысяч пользователей. Каждый пользователь, вызывающий эту функцию, создает прослушиватель событий для своего уникального API. Проблема в том, как мне управлять каждым из этих слушателей. т.е. пользователь XYZ хочет отключить потоковое потоки событий, как мне получить доступ к их конкретному слушателю событий и остановить его от запуска. Событие «Путь» вызывается каждый раз, когда обновляется обновление Nest API, в котором я пересылаю данные по – K20GH