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

fire an event programatically every some seconds using socket.io

本文关键字:方式触 编程 事件 一个 几秒 socket 使用 io      更新时间:2023-09-26

我的服务器希望每隔一段时间就对客户端说"hi"。我有这个代码示例来演示根据时间间隔触发事件。但遗憾的是,这并没有奏效。

服务器:

    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>

我想问题可能在这里:

setTimeout(sendTestMessage(), 5000)

看起来像是在调用函数,但只需要传递一个引用。

试题:

setTimeout(sendTestMessage, 5000);

服务器端和客户端的事件应该相同。你应该试试这个server.js:

io.on('connection', function (socket) {
console.log("runing time");
setInterval(()=>{
socket.emit("clientMessage","hi from server")
}, 1000)
socket.on('disconnect', function () {
    console.log("disconnecting");
});

client.js:

socket.on('connect',()=>{console.log('socket connected')});
socket.on('disconnect',()=>{console.log('socket disconnected')});
socket.on('clientMessage', (msg)=>{
   console.log('Message From Server: ', msg)
});

这将每隔一秒从服务器发送消息到客户端。