Firebase函数事件源停留在待处理状态

时间:2020-11-05 12:38:53

标签: javascript node.js google-cloud-functions event-sourcing eventemitter

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

Count() then Sum([Value]) Over (AllPrevious([Axis.Rows])) / Sum([Value]) OVER (All([Axis.Rows])) as [Cumulative Sum]

当我在本地测试此代码以进行事件发射时,使用以下Angular代码,将在控制台上检测并记录该事件。但是,将功能部署到 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) + '\n\n');
    });

    setInterval(() => {
        console.log('send1');
        Stream.emit('push', 'message', { msg: 'it works! hurraaay' });
    }, 5000);

}

1 个答案:

答案 0 :(得分:1)

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