作ったNode.jsアプリケーション初めてのNode.jsアプリケーションを作ってみた。作ったのは、ここに載っていたもの。Sites」は現時点では使えない。このサービスのベースとなっているIISのバージョンが7.5で、まだWebSocketプロトコルに対応していないからだ。試しにやってみると、ブラウザ同士で試すと問題なく動くが、実際にはWebSocket以外のプロトコルにフォールバックして動作している。この状態だとAndroidのネイティブアプリケーションからsocket.ioライブラリを使用しての接続は上手く行かなかった。アップデートされてWebSocketが使える様になったら、多分これから下に書く様な面倒な作業は不要になると思う。仮想マシン」でUbuntuサーバーを立てる仕方ないのでAzure上にUbuntu仮想マシンを立ち上げる事にした。Serverのインスタンスを起動して、Node.jsやその他のパッケージをインストールするのは、何の問題もなく完了。folder/app.jsで起動して3000番ポートで接続を待ち受ける。同時にAzure仮想マシンの設定でエンドポイントを追加して、外側の80番ポートを内側の3000番ポートにつなげる。これでブラウザからもAndroidアプリからも接続出来て問題無く動作させる事が出来た。素晴らしい!ただ、Android側のネットワークをWiFiから3G回線にすると動作しなくなるという現象に遭遇した。キャリア側で80番ポート上のWebSocketの通信を遮断しているみたいだ。(というよりおそらく、キャリアが使っているProxyサーバーがWebSocketに対応していないのだと思う。)これに対する対策として、Azure側のエンドポイントのポート番号を443に変更したら問題なく動作する様になった。(特に443番でなくてもいいと思うけれど、ユーザー側にFirewallがある場合に、外向きのTCPパケットがブロックされている可能性が80番の次に低いポート番号という事で、443番にしておいた。フォルダにシンボリックリンクを張るなりすればサーバー起動時に自動で実行される様になる。ユーザー権限でデーモンを実行したいただ、root権限ではなくユーザー権限で実行する方法がすぐには見当たらなかったので、調べるのにちょっと時間がかかった。結論としては次の2つのどちらかが良さそうだ。(または/etc/rc.localの最後に追加する。コマンドでデーモンとしての実行を管理出来る様になる。[user]を設定ファイルに追加すればOK。使う方が良さそうなので、とりあえず今はこれでいいかな、と思う。