Socket.IO for Android

はじめに

就職先募集中です\(^o^)/

 

前エントリの中の一部の実装の話です。Node.js + Socket.IOのサーバの基本構成と、Android版のSocket.IOクライアントのサンプルです。

とりあえずコードはよ。って方はコチラへ

※2013/3/10 コードをアップデートしてnginxのリバースプロキシに対応しました

何が出来るの?

Androidアプリとブラウザでリアルタイム双方向通信のサンプルです。要はチャットアプリです。サーバは受信データをブロードキャストするようにしています。

 非常に簡単なサンプルですが、ブラウザクライアントとAndroidアプリの工夫次第で、色々な実験やプロトタイピングが出来ると思います。前エントリのプロトタイプはADKを接続してハードまでリアルタイム連携させてみたものです。

 

画面サンプル(自機の送ったものは表示されない)

ブラウザの画面

f:id:tomo_watanabe:20120820231433p:plain

Androidの画面 

f:id:tomo_watanabe:20120820231423p:plain

実装

サーバ

ここを参考にして構築しました。 動作確認したバージョンは以下になります。

  • 環境はMac Mountain Lion
  • nvmとnpmを使用
  • Node.js : v0.6.6/v0.8.7
  • Socket.IO : v0.9.10
  • express 3.0.0rc3

Node.jsについてはv0.8系からは、Macの場合Xcodeがインストールされている必要があるようです。expressはそのままインストールすると最新版の3系がインストールされます。2系でインストールしたい場合は

 $ npm install -g express@2 

とするようです(ここを参照)。なお、express2とexpress3ではapp.jsの記述方法など変更されているので注意して下さい。

Android

Android側ですがここを参考にして作成しました。SDKはv16をターゲットとしていますが、android-support-v4ライブラリを使っていますので、そこそこの端末で動作すると思います。練習のためFragmentを使ってSocket.IOのロジック部分は、UI無しのFragmentに分けてありますがコードがやや複雑になってしまいました...もっとSocket.IOの理解が深まれば簡易的な実装にできると思いますが、とりあえず現状で公開しています。

このコードをベースに利用する場合

  • io.socketパッケージ以下をそのまま使えます(ライブラリ化してもOK)
  • libsのweberknecht.jarが必要です
  • JSONのパースにJSONICを使用していますが、ここは自由に...

まとめ

Node.js + Socket.IOを使ってプロトタイピングすると、ブラウザ、サーバ、モバイル、ハードと様々なものを双方向リアルタイム連携できるようになります。 ADKまで含めたプロトタイピングの例はSoftware Design8月号に記事を書いていますので、そちらも参考にしてください(ただし記事はSocket.IOではなくWebSocketを使用しているので古いです...)