この記事はMilkcocoa Advent Calendar 2016の9日目の記事です。
複数人へAPIな仕組みを展開する時にMilkcocoaで手軽に行えた話を書きます。
使った状況
明星和楽2016というイベントでTokyo IoT Devチームとして展示してきたときに使った手法です。
このようにハッシュタグの盛り上がりを検知して、複数人がそれぞれ担当する展示物(デバイス)に対して、ツイート検知した反応を伝えるという状況でした。
悩んだところ
今回、悩んだところとしては
- お互いがそれほど時間が取れない状況だったので接続だけでトラブルという状況は避けたく手軽な接続にしたい
- ツイート検知は該当ハッシュタグのツイートの流量によって変わるので随時レスポンスは変えたい
- 中のデータも当日まで変わることがあり得るので変更しても流しやすいようにしたい
- デバイスと親和性の高い通信方法を使いたいがどの程度か読めないので柔軟に対応したい
といったところで悩んでいました。
最初やろうとしたこと
上記の図の通りで、HerokuサーバーからWebSocketを立ててDynoを増強して対応する富豪的な実装を考えました。
ただ、これは結局、HerokuサーバーでWebSocketが立つので集約的になりすぎて、ちょっとの変更でも影響が出そうというところと、仮に本番前に一度接続がうまく行っても「あ、こういう風にしよう!」とあとあと変更が起こった時に、このように集約してるがゆえに、受け手が影響が出やすそうな印象でした。
実際どうしたか
結局、考えついた手法が
「各個人のMilkcocoaのアプリIDに対してHerokuサーバーから投げてやる」
ことでした。
図にするとこういうことですね。
良かったところ
当日へ向けてこのやり方はやりやすかったです。
良かったところを挙げると、
- 一番気をつかう最初の疎通という点でも、Milkcocoaのつなぐナレッジに寄せることが出来るので「なんかWebSocketサーバーにつながらないっぽいです」的なことが避けれた
- Herokuサーバーはただ投げるだけになるので(1日展示レベルでは)負荷を気にせずにデータを決めたり作り込んだり制作に集中できた
- Milkcocoa以降のデバイスへの流し方に関しては、それぞれの実装に任せられて切り分けがわかりやすかった
- Milkcocoaが中間に立つので送受信が調子悪い際もモニタリングできるので検証がしやすかった
- Milkcocoaのリクエスト数の管理を個々のアプリIDに任せられるので無料プランの制限にハラハラしなくなった
といったところで、おもに切り分けがしやすくつなげやすいMilkcocoaの良さが発揮された印象です!
困ったところ
一応、困ったところも上げておきます
- Milkcocoa依存になるので当日Milkcocoaサービスが落ちないか祈ることになってしまう
- 同様の理由で当日までMilkcocoa障害に過敏になってしまう
- Milkcocoaでデバイスを一斉に動かすのが楽しくなってしまい、今は一旦閉じているアップグレードで展示時のみ増強したくなってしまう
いやー困りましたね
(2016/12/09現在)
おそらく、いまは課金フローなど様々兼ね合いで調整中だと思うんですが、アップグレードが早く復活してほしいと切望しております。
さて、次回のアドベントカレンダーは…
Milkcocoa Advent Calendar 2016も明日で10日目。
書いてくれるのは、手軽にIoTできるフリスクサイズのIoTデバイスNefryをはじめ、MilkcocoaとつながるCocoaBitなど様々なデバイスを作られMilkcocoaとつなげる @wamisnet さんの「Milkcocoaであそぶよ!」です!