Pubnubは"Publish Key"と"Subscribe Key"があり、Publish Keyがないとデータを送信できませんし、Subscribe Keyがないとデータを受け取れません。データを送信するだけのプログラムと、データを受け取るだけのプログラムを分けることができます。
今回はMilkcocoaで、これと同じことを実現してみます。Milkcocoaはアプリを作成した時は、基本的にセキュリティ的にオープンなので、以下のセットをテンプレート的に覚えておくと良いかもしれません。
##管理画面での設定
1.認証タブの「認証済みクライアント以外を接続不可にする」をONにします。

2.API Keyを2つ作ってください。

3.セキュリティルールを設定します。
下記のように、sendができるのはAPI Keyの"ECENHDDHEILKACML"で接続しているのクライアントだけ、onでsendを監視できるのは、API Keyの"NIIBEALHBFFPGNAH"で接続しているクライアントだけ、というように設定します。
* {
permit : send;
rule : account.key == "ECENHDDHEILKACML";
}
* {
permit : on(send);
rule : account.key == "NIIBEALHBFFPGNAH";
}
設定はこれで終わりです。
##プログラムを作る
次にpublisherとsubscriber用のプログラムを作成します。以下の二つは使用しているAPI Keyが違うだけです。
test_pub.js
var MilkCocoa = require('milkcocoa');
//先ほど作成したpublisher用のAPI Key
var milkcocoa = MilkCocoa.connectWithApiKey('{app_id}.mlkcca.com', 'ECENHDDHEILKACML', 'secret');
var ds = milkcocoa.dataStore('unity');
ds.on('send', function(e) {
console.log(e);
});
setInterval(function() {
ds.send({ message:"I'm publisher" });
}, 3000);
test_sub.js
var MilkCocoa = require('milkcocoa');
//先ほど作成したsubscriber用のAPI Key
var milkcocoa = MilkCocoa.connectWithApiKey('{app_id}.mlkcca.com', 'NIIBEALHBFFPGNAH', 'secret');
var ds = milkcocoa.dataStore('unity');
ds.on('send', function(e) {
console.log(e);
});
setInterval(function() {
ds.send({ message:"I'm subscriber" });
}, 3000);
この二つのプログラミを同時にを動かすと・・・
$ node test_sub.js
{ path: 'unity', value: { message: 'I\'m publisher' } }
{ path: 'unity', value: { message: 'I\'m publisher' } }
{ path: 'unity', value: { message: 'I\'m publisher' } }
{ path: 'unity', value: { message: 'I\'m publisher' } }
{ path: 'unity', value: { message: 'I\'m publisher' } }
{ path: 'unity', value: { message: 'I\'m publisher' } }
$node test_pub.js
以上のようにtest_sub.jsがtest_pub.jsのメッセージを受け取る形になります。test_sub.jsではメッセージのsendはできませんし、test_pub.jsではメッセージの受け取りはできません。
ちなみにAPI Keyを知らない人が繋ごうとしても…
test.js
var MilkCocoa = require('milkcocoa');
var milkcocoa = new MilkCocoa('uniib1d489g.mlkcca.com');
以下のようにコネクション数は全く増えません。
