SocketRocketでiPhoneからWebSocket通信をする。 では、WebSocketのクライアントを作成したので、続いてサーバサイドの実装をします。
どの言語で実装するか?
クライアント側は、iPhoneであればObjective-Cにほぼ固定されていて、どのライブラリを使うかの選択です。でも、サーバ側は、まずどの言語を使うかを選択して、その上でどのライブラリを使うかの選択をしなければなりません。
WebSocket の導入: ウェブにソケットを実装する
このページなどに、WebSocketのライブラリの一覧が記載されています。このページを含めて色々見てみると、Node.jsによる実装例が多いです。あとは、JavaのJettyによる実装も比較的多いと感じました。
個人的には、少し乱暴ですが「Node.jsといえばWebSocket、WebSocketといえばNode.js」みたいなイメージもあります・・・。
とりあえずNode.jsとwsで実装してみる
選択肢が多いですし、運用の段階になるとまた視点が変わってくると思うので、今のところあまり深く考えていませんが、前回も参照した Objective-C でWebSocketの通信をする(SocketRocket) にのっとって、Node.jsとwsで実装してみようと思いました。
Node.jsのインストール
なにはともあれ、実行環境が必要なので node.js をインストールします。
現行のバージョンはv.0.8.12だそうです。以前にどこかからインストールしたNode.jsがありましたが、v.0.4.11でうまく動かなかったので、古いバージョンをお使いの方はまずアップデートした方が良いかもしれません。
Mac OSXでは、ポチポチしていたらインストールが完了しました。
wsのインストール
Node.jsのパッケージ管理システムからインストールすると簡単です。もしかしたら、セットアップの簡単さもNode.jsの魅力かもしれません・・・。
npm install ws
サーバサイドプログラム
簡単すぎてびっくりしますが、以下の10行くらいのプログラムで、WebSocketサーバができあがります。
var WebSocketServer = require('ws').Server
var wss = new WebSocketServer({
host : '0.0.0.0',
port : 8080
});
wss.on('connection', function(ws) {
ws.on('message', function(message) {
console.log('received: %s', message);
ws.send(message);
});
});
あとは、これをapp.jsなどと名付けて、ターミナルから実行させます。
node app.js
これで8080ポートがWebSocketサーバによってLISTEN状態になりますので、クライアントから接続することができます!
WebSocketを使ってみた感想
こんな感じで、WebSocketを試してみました。ローカルの環境でやっているので当然といえば当然なのですが、サーバからもクライアントからもバシバシと好きなタイミングでデータを送信できるのは楽しいです。
実際に運用しようと思うと、Node.jsは最適なのかとか、これをいかにして分散させるかとか、いろいろ考えることが出てきます。そのあたりは、現在調査中なので、運用例などお持ちの方がいたらぜひ教えて下さい!
コメント
[…] クライアントが1人で、他のクライアントと関連を持たない場合は、「Node.jsでWebSocketサーバを立てる」で紹介したように非常に簡単な実装でできます。 […]