2012-10-26 201 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); 
相關問題