流星方法 - 从服务器流式传输/产生数据



我正在编写一个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 本身一定有一种聪明的方法来解决这个问题。想法?

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

然后,您可以在客户端上的某个主模板页面中订阅Notifications集合。使用observeChanges查找对集合的更改,控制台.log它们,使用 JavaScript 在页面上显示它们,或者只是安装一个包(如sAlerts(来处理它们。

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

稍后我将发布代码片段。

最新更新