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

时间:2017-08-04 21:57:09

标签: meteor ecmascript-6 stream generator

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

2 个答案:

答案 0 :(得分:1)

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

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

在observe更改回调中,应该调用seenNotification方法从db中删除通知,因此不再显示。

稍后我会发布代码片段。

答案 1 :(得分:1)

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

我认为它可以轻松解决您的问题。