【问题标题】:Sending events from server to client(s) in Meteor在 Meteor 中将事件从服务器发送到客户端
【发布时间】:2016-12-24 00:47:05
【问题描述】:

有没有办法在不使用集合的情况下将事件从服务器发送到所有或部分客户端。

我想向客户发送带有一些自定义数据的事件。虽然流星非常擅长处理集合,但在这种情况下,它不需要额外的复杂性和存储。

在服务器上不需要 Mongo 存储或本地集合。 客户端只需要被提醒它从服务器接收到一个事件并根据数据采取相应的行动。

我知道使用 sockjs 相当容易,但从服务器访问 sockjs 却非常困难。

Meteor.Error 做了类似的事情。

【问题讨论】:

    标签: events meteor


    【解决方案1】:

    该软件包现已弃用,不适用于 >0.9 版本

    您可以使用以下最初旨在从客户端-服务器-客户端广播消息的包

    http://arunoda.github.io/meteor-streams/

    没有collection,后面没有mongodb,用法如下(未测试):

    stream = new Meteor.Stream('streamName'); // defined on client and server side
    
    if(Meteor.isClient) {
        stream.on("channelName", function(message) {
          console.log("message:"+message);
        });
    }
    
    if(Meteor.isServer) {
        setInterval(function() {
          stream.emit("channelName", 'This is my message!');
        }, 1000);
    }
    

    【讨论】:

    • 有没有类似这个包的替代方案?
    • 我们可以全局添加这个,这样我们就不必在我们必须使用的每个文件中声明
    【解决方案2】:

    应该使用集合。

    如果您所做的只是创建一个集合、向其中添加一个属性并对其进行更新,那么“增加的复杂性和存储空间”就不是一个因素。

    集合只是服务器和客户端之间数据通信的一种形式,它们恰好建立在 mongo 之上,如果你想像数据库一样使用它们,这真的很好。但在最基本的情况下,它们只是一种表达“我想存储一些称为 X 的信息”的方式,它与您应该想要利用的发布/订阅架构挂钩。

    未来除了Mongo之外,还会暴露其他数据库。我可以看到在某个阶段有一个智能包,可以将 Collections 剥离到它们最基本的功能,就像你提议的那样。也许你可以写它!

    【讨论】:

    • 那么,如果你想将加速度计数据从一个设备流式传输到另一个设备,使用集合不会影响流率吗?我想尽可能快地从一个具有加速度计数据的设备流式传输到另一个使用该数据绘制 WebGL 图形的设备。我认为消除对集合的需求,而只是流数据,会更快。
    【解决方案3】:

    我觉得 @Rui 和使用 Collection 的事实只是来发送消息感觉很麻烦。
    同时,一旦您有几条这样的消息要发送,就可以方便地使用一个名为 settings 或类似名称的集合来保存这些消息。


    【讨论】:

      【解决方案4】:

      我找到的最好的包是 Streamy。它允许您发送给每个人,或者只发送给一个特定的用户

      https://github.com/YuukanOO/streamy

      meteor add yuukan:streamy
      

      向所有人发送消息:

      Streamy.broadcast('ddpEvent', { data: 'something happened for all' });
      

      在客户端监听消息:

      // Attach an handler for a specific message
      Streamy.on('ddpEvent', function(d, s) {
        console.log(d.data);
      });
      

      向一个用户发送消息(按 id)

      var socket = Streamy.socketsForUsers(["nJyQvECmkBSXDZEN2"])._sockets[0]
      Streamy.emit('ddpEvent', { data: 'something happened for you' }, socket);
      

      【讨论】:

        猜你喜欢
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-02
        • 1970-01-01
        • 2021-02-15
        相关资源
        最近更新 更多