まとめておこう

と思ったので( ´ω`)

socket.ioを使った簡単コードをさらしときます。
使おうと思っているのはサーバーからのほぼ一方的データプッシュなので
ここでは1秒おきに現在時間をプッシュしてみてます。
broadcastは、使おうと思っている箇所がroomも要るかもなので
また勉強したあとで。
そういえばroomっていくつ作れるんだろう・・・( ´ω`)

◎環境
CentOS6.3
Apache2.4.3
Node.js@0.8.11(nvm使用)
socket.io@0.9.10(npm install -g 使用)
Chrome22.0.1229.79m
Firefox15.0.1

◎ファイル配置
index.html:/usr/local/apache2/htdocs(つまりDocumentRoot)
server.js:/usr/local/src(適当なフォルダ)
Node.js:/usr/local/src/nvm/v0.8.11
socket.io:/usr/local/src/nvm/v0.8.11/lib/node_modules/socket.io

※nvm.shにNODE_PATH=$NODE_PATH:${NVM_PATH}_modules追加した。

◎IPアドレス、ポート
Apache:172.16.0.1:80
socket.io:172.16.0.1:8000

◎index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<title>WebSocketTest</title>
<meta charset="UTF-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://172.16.0.1:8000/socket.io/socket.io.js"></script>
<script>
var socket=io.connect('http://172.16.0.1:8000/');
socket.on('connecting',function(){
    $("#content").text('Connecting...');
});

socket.on('error',function(){
    $("#content").text('Conect Failed.');
});

socket.on('connect',function(){
    console.log('connected');
    socket.on('msg push',function(msg){
        $("#content").text(msg);
        if(msg.indexOf("Can")!==-1){
            $("#content").append('<button value="yes">Yes</button>');
            $("#content button").click(function(){
                socket.emit('msg send',$("#content button").val());
            });
        }
        console.log(msg);
        if(msg.indexOf("OK")!==-1){
            $("#content").text(msg);
        }
    });
    socket.on('msg time',function(msg){
        $("#content").text(msg);
        console.log(msg);
        $("#content").append('<button value="bored">I am bored.</button>');
        $("#content button").click(function(){
            socket.emit('msg send',$("#content button").val());
        });
    });
    socket.on('msg end',function(msg){
        $("#content").text(msg);
        socket.disconnect();
    });
});
</script>
</head>
<body>
<h1>I am The Client</h1>
<div id="content">
</div>
</body>
</html>

◎server.js

var io = require('socket.io').listen(8000);
var timeout;
var interval;

io.sockets.on('connection',function(socket){
    console.log('Client Connect.');
    socket.emit('msg push', 'Can You Hear Me?');
    
    socket.on('msg send',function(msg){
        console.log(msg);
        if(msg==='yes'){
            socket.emit('msg push','OK. I display Time.');
            timeout=setTimeout(
                function(){
                    interval=setInterval(function(){
                        socket.volatile.emit('msg time',new Date().toString());
                    },1000);
                },1000
            );
        }else if(msg==='bored'){
            socket.emit('msg end','All right,SeeYa.');
            clearInterval(interval);
            clearTimeout(timeout);
        }
    });
});