Nest APIとストリーミングをサポートしていないサービス(ST)の間のストリーミングの休止に関する問題を回避しようとしています。EventSourceイベントリスナーを終了しますか?
これを回避するために、ネストトークンを含むSTからポストリクエストを受け取り、データをSTに返すEventSourceイベントリスナをトリガするサービスをSailsに構築しました。それは重く、ここで巣の残りのストリーミング例オフに基づいている
次のように 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がイベントストリーミングをオフにしたい場合、特定のイベントリスナーにアクセスして実行を停止するにはどうすればよいですか。 Putイベントは、Nest APIが更新されるたびに呼び出されます。これは、データの転送先です。 – K20GH