【问题标题】:How to return a IObservable<T> in aws lambda如何在 aws lambda 中返回 IObservable<T>
【发布时间】:2019-03-15 02:02:07
【问题描述】:

我希望在基于推送的通知中返回一个IEnumerable&lt;T&gt;,该IEnumerable&lt;T&gt; 在 AWS lambda 函数的消费者的响应正文中流式传输。

Consumer|---Call---------Object1------Object2----Object3----Finish
              v           ^            ^         ^          ^
Lambda  |---Start-----Object1-----Object2------Object3-----End

因此,这个 lambda 函数的使用者可以将响应主体作为流读取,在一个轶事中,如果我们让 lambda 响应 [1,2,3] 并在每个项目之间等待一秒钟,那么使用者将收到 [1, {1 秒} 2, {1 秒} 3]。 关于如何做到这一点的任何线索?

【问题讨论】:

    标签: .net-core aws-lambda system.reactive


    【解决方案1】:

    试试这个:

    var values = new [] { 1, 2, 3, };
    
    var observable =
        Observable
            .Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1.0))
            .Zip(values, (_, v) => v);
    

    【讨论】:

    • 在 lambda 中简单地响应 iobervable 是否确保客户端使用 lambda 是异步响应?序列化呢,不会在返回之前消耗掉整个响应吗?
    • @JohniMichels - 你真的需要更清楚地向我解释这两个问题。我不明白你在问什么。
    • 我的意思是,如果我在返回 iobservable 的 aws lambda 端点上请求 POST,那么如何确保响应逐项推送?询问是因为即使是 lambda 端的序列化程序在返回其等效字符串之前消耗整个对象也会使客户端等待 2 秒并返回 [1, 2, 3]。
    • @JohniMichels - 是的,我不是 100% 遵循你所说的。 observable 会将静态列表推送到一个新线程上,并逐项推送它们。
    • 是的,当您在使用返回 iobservable 的程序集的同一台机器上谈论线程时。我要问的是一个通过互联网调用 aws lambda 函数的客户端,该函数以类似推送的方式返回一个列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多