Ich versuche, ein Problem mit Rest-Streaming zwischen der Nest-API und einem Dienst (ST), der kein Streaming unterstützt, zu umgehen.EventSource-Ereignislistener beenden?
Um dies zu umgehen, habe ich einen Dienst auf Sails erstellt, der eine Postanforderung von ST mit dem Nest Token annimmt und dann einen EventSource-Ereignis-Listener auslöst, der die Daten zurück an ST sendet.
Es wird hier aus dem Nest Rest-Streaming-Beispiel basiert stark: https://github.com/nestlabs/rest-streaming und mein Code wie folgt:
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);
}
};
Das Problem, das ich allerdings vorauszusehen ist, dass, sobald eine Anforderung durch den Knoten-Server empfangen wird, Es startet den Event-Listener, aber ich kann nicht für das Leben von mir herausfinden, wie ich den Event-Listener töten kann.
Wenn ich nicht einen Weg finden kann, dies zu stoppen, dann wird jeder EventListener unbegrenzt laufen, was offensichtlich nicht geeignet ist.
Hat jemand irgendwelche Vorschläge, wie man das Problem überwinden kann?
Um zu überprüfen, habe ich verstanden: Ihr "Put" Event Listener wird nur einmal aufgerufen werden? Und danach brauchst du das Objekt 'EventSource' nicht mehr? –
So habe ich meinen Controller wie oben, der von mehreren tausend Benutzern erreichbar ist. Jeder Benutzer, der diese Funktion aufruft, erstellt einen Ereignis-Listener für seine eindeutige API. Das Problem ist, wie ich jeden dieser Listener verwalten kann. dh Benutzer XYZ möchte das Ereignisstreaming abschalten, wie ich auf seinen spezifischen Ereignis-Listener zugreife und ihn vom Laufen abhalte. Das Put-Ereignis wird jedes Mal aufgerufen, wenn die Nest-API aktualisiert wird. Dort leitet ich die Daten an die Adresse – K20GH