DDPの紹介記事で、何でも公開できると読みましたが、どこかで読んだことがあります(たとえば、このStackoverflowのコメント任意のデータを公開し、HTMLを自動的に更新する)、コレクションのみを公開できます。
では、真実はどこにあるのでしょうか。コレクション以外のものを公開できれば、今のところ例が見つからないので、例を見てみたいと思います。
DDPの紹介記事で、何でも公開できると読みましたが、どこかで読んだことがあります(たとえば、このStackoverflowのコメント任意のデータを公開し、HTMLを自動的に更新する)、コレクションのみを公開できます。
では、真実はどこにあるのでしょうか。コレクション以外のものを公開できれば、今のところ例が見つからないので、例を見てみたいと思います。
ドキュメントから: http://docs.meteor.com/#meteor_publish
パブリッシュ関数は Collection.Cursor を返すことができます。この場合、Meteor はそのカーソルのドキュメントをパブリッシュします。Collection.Cursors の配列を返すこともできます。この場合、Meteor はすべてのカーソルを公開します。
したがって、現時点では、カーソルを介してのみコレクションを返すことができます (の結果Collection.find()
)。
他のデータを返すには、sockjs ストリーム (meteor がサーバーとの通信に使用するソケット ライブラリ) をハックする必要があります。これは、将来のバージョンの meteor との互換性を保証するものではないことに注意してください。Sockjs は meteor がサーバー間 (有線) で通信するために使用するライブラリです。
from任意のデータを公開し、HTMLを自動更新*
クライアント側のjs
sc = new Meteor._Stream('/sockjs');
sc.on('message', function(payload) {
var msg = JSON.parse(payload);
Session.set('a_random_message', JSON.stringify(msg.data));
});
Template.hello.greeting = function () {
return Session.get('a_random_message');
};
サーバーサイドjs
ss = new Meteor._StreamServer();
ss.register(function (socket) {
var data = {socket: socket.id, connected: new Date()}
var msg = {msg: 'data', data: data};
// Send message to all sockets (which will be set in the Session a_random_message of the client
_.each(ss.all_sockets(), function(socket) {
socket.send(JSON.stringify(msg));
});
});
流星群も見ることができます。下記参照。
大気を介して流星の流れを追加したと仮定します-
mrt add streams
sc = new Meteor.Stream('hello');
if(Meteor.isServer) {
Meteor.setInterval(function() {
sc.emit('a_random_message', 'Random Message: ' + Random.id());
}, 2000);
Meteor.permissions.read(function() { return true });
}
if(Meteor.isClient) {
sc.on('a_random_message', function(message) {
Session.set('a_random_message', message);
});
Template.hello.greeting = function () {
return Session.get('a_random_message');
};
}