2012-10-26 70 views
8

有没有办法将事件从服务器发送到所有或部分客户端而不使用集合。从服务器向客户端发送事件流星

我想发送带有一些自定义数据的事件给客户端。虽然流星在收集方面做得非常好,但在这种情况下,增加的复杂性和存储空间并不需要。

在服务器上不需要Mongo存储或本地集合。 客户端仅需收到来自服务器的事件的警报,并相应地对数据执行操作。

我知道这对于sockjs来说相当简单,但是很难从服务器访问sockjs。

Meteor.Error做了类似的事情。

回答

4

包现在已经过时,并没有为版本工作> 0.9

您可以使用下面的包,它最初的目标是播放来自客户端 - 服务器 - 客户端的消息

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

没有收藏,没有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); 
} 
+0

有没有类似于这个包的其他选择? –

+0

https://atmospherejs.com/rocketchat/streamer看起来像一个可行的替代方案 – TechplexEngineer

2

应该使用集合。

如果您所做的只是创建一个集合,向其中添加一个属性并更新该集合,则“增加的复杂性和存储”不是一个因素。

集合只是服务器和客户端之间进行数据通信的一种形式,它们恰好建立在mongo上,如果你想像数据库一样使用它,这真的很不错。但从最基本的角度来看,它们只是一种说法,“我想存储一些称为X的信息”,它挂钩到您应该利用的发布/订阅体系结构中。

未来,除了Mongo之外,其他数据库将被公开。我可以看到在某个阶段存在一个智能包,可以将集合剥离到他们提出的最基本的功能。也许你可以写它!

+0

那么,如果你想加速度计数据从一个设备流到另一个设备,使用集合不会影响流速率?我想尽可能快地从一个具有加速度计数据的设备流到另一个使用该数据绘制WebGL图形的设备。我认为消除对收藏的需求,并且只是流式传输数据会更快。 – trusktr

1

我觉得@Rui和使用Collection 只是发送消息感觉很累赘。
与此同时,一旦你有几个这样的消息发送方便,有一个名为设置或类似的地方,你保留这些。


1

我发现的最佳包是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); 
相关问题