HTML5時代のサーバpush型ナビのプロトタイプ

サーバpush型のWebアプリを作ってみた

いわゆるサーバ・クライアントモデルでは、クライアントが情報を拾い、サーバへ送信することで膨大なデータを処理したり、計算したりします。今回は全く逆のシステムを作ろうとしています。サーバが情報を拾い、クライアントへpush配信するシステムです。

ハード構成

今回はデバッグも兼ねて簡単な構成で。ハード的にはMacbookAirにGPSロガーを組み合わせただけ。これを車に積んで走行し、走行中のログをリアルタイムにブラウザなどで表示できるようになっています。

f:id:tomo_watanabe:20130609204624j:plain

内部構成

内部的にはNode.jsをサーバとして稼働させ、node-serialportを使って、GPSの情報を取得、位置情報をリアルタイムにクライアントへWebSocketを使ってpush配信します。ネットワークアクセスはAndroidのテザリングを利用しました。

f:id:tomo_watanabe:20130609210732p:plain

クライアント表示

サーバにアクセスするだけで、Google Map上に位置情報が送信され、リアルタイムに更新されるようになります。 (アイコンを細工しなかったせいでキモい…)

これはAndroid上でChromeで表示

f:id:tomo_watanabe:20130609211337p:plain

MacbookAirでのChromeでの表示

f:id:tomo_watanabe:20130609211429p:plain

まとめ

システム的にはサーバ・クライアントが逆になっているだけなのですが、サーバがセンサー情報を直接扱いpush配信するというところがミソです。車載サーバとしてこういった用途への応用は比較的容易なんじゃないでしょうか。

サーバというと膨大な処理を想像しがちですが、小型サーバでシンプルな処理を行い、データをpush配信する。という目的で使うことは意外とメリットがありそうです。

  • push配信なので、クライアントに負担が掛からない(GPSも使わないし)
  • WebSocketを使っているので、比較的リアルタイム更新が可能
  • サーバに接続するだけで情報が得られる。複数人で同じ情報にアクセス可能
  • プロトコルさえ決めれば、クライアントサイドは誰でも作れる(ブラウザでもアプリでも)

HTML5でのWebアプリ開発が話題になってきていますが、サーバに直接センサーを処理させて、push配信するというのも、HTML5における新しいWebアプリの形だと思います。

デバッグも出来たので、今度はRaspberry Pi上で動作するように移植して、文字通り「車載サーバ」を作ろうと思います。