LoginSignup
4

More than 5 years have passed since last update.

MilkcocoaをPubnub的な感じにする

Last updated at Posted at 2016-03-15

Pubnubは"Publish Key"と"Subscribe Key"があり、Publish Keyがないとデータを送信できませんし、Subscribe Keyがないとデータを受け取れません。データを送信するだけのプログラムと、データを受け取るだけのプログラムを分けることができます。

今回はMilkcocoaで、これと同じことを実現してみます。Milkcocoaはアプリを作成した時は、基本的にセキュリティ的にオープンなので、以下のセットをテンプレート的に覚えておくと良いかもしれません。

管理画面での設定

1.認証タブの「認証済みクライアント以外を接続不可にする」をONにします。

スクリーンショット 2016-03-15 13.33.59.png

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

スクリーンショット 2016-03-15 13.35.14.png

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');

以下のようにコネクション数は全く増えません。

スクリーンショット 2016-03-15 13.48.24.png

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4