リアルタイムな双方向通信 SignalR をSPAJAM東海予選で使いましたので、今回はちょっとだけそのフォローアップ。
前回記事
pglib.sk8punk.net
SignalR
SignalRは数年前からあるWebSocketをベースにしたライブラリで、接続された端末すべてにリアルタイムな通信を提供してくれます。
今回作ったアプリだと、
- Androidアプリで選択した内容を、WindowsMR、スマホブラウザへ通知
- スマホブラウザでタップした内容を、WindowsMR、他のスマホブラウザへ通知
- WindowsMRで合図した終了を、Android、スマホブラウザへ通知
といったやりとりに使っています。
サーバーサイドはASP.NETが動けばいいのでIISとかAzureにホストできます。今回はAzure Webappにデプロイしてました。
最近、AzureにSignalR Serviceがプレビューリリースされたので、もっとお手軽に使えるようになってきそう。
クライアントはWebSocketに対応したブラウザや、.NET系のアプリ、AndroidなJavaなど色々対応しているようです。
Azureのプラン
開発中はWebAppの無料プランで使用していました。手持ちの端末で多少の連打にも余裕で答えていたので、あまり心配していませんでした。
が、万が一デモでフリーズしてしまう方が大惨事なので、念には念を入れてスケールアップ。無料からスケールアップできる一番つよいサイズS1に変更しました。少なくとも倍以上のスペックにはなりそうでした。
変更したのは発表が始まる直前。スケールアップ後、軽く動作確認して問題なかったのでそのまま本番に臨みました。
トラフィックとお値段
で、本番でを迎えるわけですが、審査員、他の開発者さんたちに参加してもらい、いざデモを行うとテスト時では想像できないほどのトラフィックが!!
例えるなら、テスト時は水道の蛇口くらいだったのが、本番では公園の噴水レベルでした。想定以上の動きに「ハワワワワ…」ってなりましたよw
軽く慌てつつ終了の合図を飛ばしましたが、終了直前、WindowsMR(Unity)側が軽くフリーズしてました。ALIENWARE13R3の限界だったのか…。
で、前回の記事でも投稿したトラフィックが発生していたわけですが、わずか数分で1000以上ものリクエストが。
面白いのがAzure側の受信1.6MBに対して送信が600MBを超えているという点。ブロードキャストしているので1つの受信で多数の送信が発生しているというのが読み取れます。
そして価格が管理画面に反映されました。
デモ終了後、すぐに無料プランへ切り替えたので、有料では1時間も使っていません。
まとめ
想定以上のトラフィックだったので、これでデモが成功するなら激安ですね。むしろALIENWAREへeGPUを投資した方がいいのか…?
なかなか開発していて有料版へ切り替えるタイミングって無いと思うので参考になれば。