Socket.ioでサーバ側からクライアントに送信する際の書き方について

・setTimeoutの使い方、関数の評価タイミング
・io.connectの中のsocket変数のスコープ
というJavaScriptの基本的なところの勉強になる。

app.js

var express = require("express");
var app = express();
var io = require("socket.io").listen(app.listen(3000));

//express code                                                                   
app.get("/",function(req,res){
    res.sendfile(__dirname + '/index.html');
});
app.use(express.static(__dirname));

//socket.io code                                                                 
io.sockets.on('connection',function(socket){
  socket.emit('connect_ok',{message:'websocket communication ready'});

  socket.on('trigger1',function(data){
    console.log(data);
    setTimeout(function(){externalFunc()},3000);
  });

  function externalFunc(){
    socket.emit('signal1',{message:'external function emitted'});
  }

});

index.html

<html>
<head>
  <title>socketmongo</title>
  <meta charset="UTF-8">
  <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
  <script src="http://cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
<script>
    $(function(){
      var socket = io.connect();
      socket.on('connect_ok',function(data){
        console.log(data);
        $("#code").text(data["message"]);
        socket.emit('trigger1',{my:'data'});
      });
      socket.on('signal1',function(data){
      	$("#signal").text(data["message"]);
      });
    });
</script>
</head>
<body>
  <h1>socket.io with MongoDB</h1>
  <h2 id="code"></h2>
  <p id="signal"></p>

</body>
</html>