【问题标题】:Meteor methods - stream/yield data from serverMeteor 方法 - 从服务器流式传输/生成数据
【发布时间】:2018-01-12 22:29:51
【问题描述】:

我正在编写一个 Meteor 应用程序,它允许客户端通过单击按钮在服务器上执行终端命令。

我知道如何用一个命令来做到这一点:

//server
Meteor.methods({ exec : cmd => { ... } })

//client
Meteor.call('exec', cmd, (err, result) => {
    console.log(result)
})

但是现在我正在尝试实现一个更复杂的协议并且不太清楚最好的方法是什么。我希望客户端启动一系列命令,让服务器运行它们并逐步告诉我它们是成功还是失败。

显然,我可以使用上面的代码来实现这一点,方法是编写使用第一个命令运行 exec 的客户端代码,检查来自服务器的结果,使用下一个命令运行 exec 等等。

关键是在我的情况下,一系列命令总是相同的,所以在客户端上只执行一个Meteor.call 会更有意义——服务器会知道要运行哪些命令。但是,我还希望在客户端输入单个命令时获得它们的结果——这是我不能做的,因为Meteor.call 当然只返回一次。

我正在寻找的是一种流或迭代器,通过它我可以向客户端发送大量消息,直到一切都完成。我见过一些名为meteor-streams 和类似的过时软件包,它们可能可以做类似的事情,但我认为 Meteor 本身必须有一种聪明的方法来解决这个问题。想法?

【问题讨论】:

    标签: meteor ecmascript-6 stream generator


    【解决方案1】:

    一个常见的解决方案是Notifications 集合。使用架构创建集合:for: ${userid}, msg: ${msg string}, type: ${err success etc}。创建通知发布,该发布与用户 userid 一起发布文档。

    然后您可以在客户端的某个主模板页面中订阅Notifications 集合。使用 observeChanges 查找对集合的更改,然后使用控制台记录它们,使用 JavaScript 在页面上显示它们,或者简单地安装像 sAlerts 这样的包来处理它们。

    在观察更改回调中,应调用seenNotification 方法从数据库中删除通知,因此不再显示。

    稍后我会发布代码 sn-ps。

    【讨论】:

    • 我在想这样的事情将是要走的路。感谢您的详细解释!我会接受,除非有人想出一种根本不涉及数据库的方法——我对此表示怀疑。
    【解决方案2】:

    看看这个:https://github.com/RocketChat/meteor-streamer

    我想它会很容易解决你的问题。

    【讨论】:

    • 谢谢,这绝对可以满足我的所有需求,但我认为我更喜欢 Seb Morris 描述的原生 Meteor 解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2014-06-06
    • 2015-10-15
    • 2023-01-31
    • 2013-05-11
    相关资源
    最近更新 更多