使用socket.io每隔几秒以编程方式触发一个事件

时间:2014-03-15 12:58:07

标签: javascript node.js websocket socket.io client-server

我的服务器希望每隔一段时间对客户说“嗨”。我有这个代码示例,用于根据时间间隔演示事件触发。 但遗憾的是它没有用。

服务器:

    var app = require('http').createServer(handler),
     io = require('socket.io').listen(app),
     fs = require('fs');


    app.listen(8001);



     function handler(req, res) {
     fs.readFile(__dirname + '/client1.html', function(err, data) {
      if (err) {
      console.log(err);
      res.writeHead(500);
      return res.end('Error loading client1.html');
    }
    res.writeHead(200);
      res.end(data);
    });
  }

  io.sockets.on('connection', function (socket) {
    console.log("runing time");

    socket.emit( "clientMessage","hi from server");
    socket.on('clientMessage', function () {
        socket.emit( "serverMessage","hi from server");
    });
    socket.on('disconnect', function () {
        console.log("disconnecting");
    });
  });

客户:

   <script src="/socket.io/socket.io.js"></script>

   <script>
   var socket = io.connect("http://localhost:8001");
   socket.on('connection', function(socket) {


       // *this line is not reached*
        alert("connected")

      sendTestMessage()

    socket.on("serverMessage", function(d) {
        alert("server Message : " + d)
    })
    socket.on('disconnect', function() {
        alert("disconnected")
    });

   });


   function sendTestMessage() {
    alert("test")
    socket.emit('clientMessage', "Test Message From Client");
    setTimeout(sendTestMessage(), 5000)
   }

  </script>

请帮忙为什么?

1 个答案:

答案 0 :(得分:0)

我认为问题可能在这里:

setTimeout(sendTestMessage(), 5000)

看起来你正在调用该函数,但只需要传递一个引用。

尝试:

setTimeout(sendTestMessage, 5000);