node.jsでsocket通信

みんな大好きエコーサーバ

Install websocket server module

 % npm install websocket-server

Server side

httpとwsプロトコルで、返す値を変えられる。
サーバの監視用にする、クライアント側のコードを返すなどの利用方法が考えられる。

var http = require('http');
var ws   = require('websocket-server');

// http
server = http.createServer(function(req, res){
  res.writeHead(200, {'Content-Type': 'text/html'});    
  res.end("<html><body><h1>It's Works!</h1></body></html>");
});
server.listen(10003);

// WebSocket
var socket = ws.createServer({'server': server});
socket.on('connection', function(conn){
  conn.on('message', function(msg){
    conn.send(msg);
  }); 
  conn.on('close', function(){
    console.log('closed');  
  })  
});

Client side

今回は、サーバのコードとは分けてあるので、httpでアクセスできる場所に適当に置く。
ローカルファイル(file://)だと、セキュリティに引っかかりWebSocket通信ができない。

<script>
  var ws = new WebSocket('ws://127.0.0.1:10003/');
  ws.onopen = function() {
    ws.send('hello world'); 
  }
  ws.onmessage = function(evt) {
    console.log(evt.data);
  }
  ws.onclose = function() {
    console.log('closed');  
  }
</script>