2011年9月25日日曜日

nodeをひやかしてみる

nodeをひやかしてみる



概要

    ノンブロッキングなサーバ実装 node.jsをインストールしてSocket.ioをインストールして

    なんていうか暇つぶし。

    目的はGWTでのSocket.io.jsの 薄い本(×) 薄いラッパー実装(○) を作るのでテストする機構が欲しかった。



インストール

    ちょっと前はHomeBrewとかでやってたけど

    GitHubからできるようになってて

    しかもしっかりフォルダで管理できたので、これで汎用だと思う。


    キャンペーンサイトはここ

    http://nodejs.org/


    インストール情報はここ

    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を入れてみる。

    http://socket.io/


    簡単に言うとWebSocketのラッパー。

    ブラウザ側のsocket.io.jsとサーバ側のsocket.ioからなり、

    xhrとかWebSocketとかでPush通信が使える。



インストール(socket.io)

    http://socket.io/#how-to-use

    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、とか出る。

    

    



以上。



0 件のコメント:

コメントを投稿

フォロワー