nodeをひやかしてみる
概要
ノンブロッキングなサーバ実装 node.jsをインストールしてSocket.ioをインストールして
なんていうか暇つぶし。
目的はGWTでのSocket.io.jsの 薄い本(×) 薄いラッパー実装(○) を作るのでテストする機構が欲しかった。
インストール
ちょっと前はHomeBrewとかでやってたけど
GitHubからできるようになってて
しかもしっかりフォルダで管理できたので、これで汎用だと思う。
キャンペーンサイトはここ
インストール情報はここ
https://github.com/joyent/node/wiki/Installation
Macなら
Step 3a - Installing on Unix (including BSD and Mac)
丸コピでいける。
git clone --depth 1 git://github.com/joyent/node.git # or git clone git://github.com/joyent/node.git if you want to checkout a stable tag
cd node
git checkout v0.4.11 # optional. Note that master is unstable.
export JOBS=2 # optional, sets number of parallel commands.
mkdir ~/local
./configure --prefix=$HOME/local/node
make
make install
echo 'export PATH=$HOME/local/node/bin:$PATH' >> ~/.profile
echo 'export NODE_PATH=$HOME/local/node:$HOME/local/node/lib/node_modules' >> ~/.profile
source ~/.profile
最初やってたとき、GitHubからのcloneの時点でtimeoutのエラーが出て全俺が泣いた。
あれはなんだったのか、、
+Socket.io
サーバサイドにSocket.ioを入れてみる。
簡単に言うとWebSocketのラッパー。
ブラウザ側のsocket.io.jsとサーバ側のsocket.ioからなり、
xhrとかWebSocketとかでPush通信が使える。
インストール(socket.io)
nodeインストール後であれば、npmコマンドが効くので、
サイトの内容に従ってインストール。
npm install socket.io
socket.ioで遊ぶ
サーバサイド/
下記内容をserversideSocketIO.jsとか適当にファイルにして、nodeで実行する。
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
→serversideSocketIO.js
node serversideSocketIO.js
これでサーバ起動。
次にクライアントサイド/
下記内容をclientsideSocketIO.htmlとかにして、デスクトップとかに置いとく
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
→clientsideSocketIO.html
"/socket.io/socket.io.js"の場所は、環境ごとに異なると思う。
の部分、もちろん自分で用意しないとダメ。
自分は、socket.ioインストール後、spotlightに聞いてみたら、
/Users/俺/node_modules/socket.io/node_modules/socket.io-client/dist
にあったので何も考えずにそれを使った。
この状態でclientsideSocketIO.htmlをブラウザで開くと、通信が発生する。
ウインドウを開いた時点で通信開通、閉じた時点でdiscard、とか出る。
以上。