Node.jsでWebSocketサーバを立てる

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. […] クライアントが1人で、他のクライアントと関連を持たない場合は、「Node.jsでWebSocketサーバを立てる」で紹介したように非常に簡単な実装でできます。 […]

タイトルとURLをコピーしました