Firebase函数事件源一直处于挂起状态



我正在尝试使用事件发射器来触发我需要的特定函数。这是nodejs代码。事件源在localhost上本地运行,但一旦部署,我就无法检测到事件触发器。但是,firebase函数记录器上的日志显示了正在执行的函数。但是,在测试时,功能不会向事件提供任何反馈

const EventEmitter = require('events');
const Stream = new EventEmitter();
// 'Access-Control-Allow-Origin': '*',
// 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
exports.eventEmitter = (req, res) => {
console.log(req.body);
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
Connection: 'keep-alive'
})
Stream.on('push', function(event, data) {
console.log('send0');
res.write('event: ' + String(event) + 'n' + 'data:' + JSON.stringify(data) + 'nn');
});
setInterval(() => {
console.log('send1');
Stream.emit('push', 'message', { msg: 'it works! hurraaay' });
}, 5000);
}

当我使用以下Angular代码在本地测试该代码以进行事件发射时,会在控制台上检测并记录该事件。然而,一旦我将函数部署到firebase函数,我就会在浏览器的网络选项卡上收到一个挂起的请求。该请求没有任何日志,似乎根本没有完成,我的角度代码不可避免地检测不到任何

getStream() {
return Observable.create(observer => {
let url = 'link to emitter';
let eventSource = new EventSource(url);
eventSource.addEventListener('message', function(e) {
console.log(e.data);
}, false);

eventSource.addEventListener('open', function(e) {
// Connection was opened.
console.log("open");
}, false);

eventSource.addEventListener('error', function(e) {
if (eventSource.readyState == EventSource.CLOSED) {
// Connection was closed.
console.log("closed");
}
}, false);
eventSource.addEventListener('message', message => { console.log(message.data); });
eventSource.onmessage = (event) => {
let json = JSON.parse(event.data);
if (json !== undefined && json !== '') {
this.zone.run(() => observer.next(json));
}
};
eventSource.onerror = (error) => {
if (eventSource.readyState === 0) {
console.log('The stream has been closed by the server.');
eventSource.close();
observer.complete();
} else {
observer.error('EventSource error: ' + error);
}
}
});
}

云函数HTTP端点不支持将数据流式传输到像websocket这样的客户端。它只能提前接收整个有效负载,然后将整个有效负载发送回客户端。没有分块的响应。有效负载的限制为10MB。函数调用的默认超时时间为60秒,最多只能增加到9米。如果您需要流式传输,那么Cloud Functions不是适合您用例的产品。

最新更新