socket.io发出的循环,直到客户端响应?(socket.io emit in loop unt

2019-09-27 23:59发布

我想,直到客户端点击一个按钮和确认收到发射的消息给客户端每X秒。

我如何可能做到这一点任何想法? 新节点,但我希望我能得到这个与节点和Sockets.io完成。

预先感谢任何见解或帮助让我在正确的方向。

Answer 1:

我认为,要完成这将是创建一个扩展“香草” Node.js的事件类的新类的最佳途径。 您需要将首先要求它像这样:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

https://nodejs.org/api/events.html

一旦你得到了你的类,你需要做的是建立一个子过程中,要做到这一点,你可以参考这里的官方文档:

https://nodejs.org/api/child_process.html

这里面的过程,你可以创建你的循环,并通过套接字发送消息。 扩展事件类的目标是能够创建一个内部事件发射,您可以收听到检测特定事件(如插座关闭,或任何你想追踪)

我希望这回答了你的问题。



Answer 2:

这是一个简单的设置只是为了给你如何做到这一点的想法:

节点服务器(很基本的,只有socket.io,没有别的):

const io = require('socket.io')(3000);
const interval = 1000;
io.on('connection', function (socket) {
    console.log(socket.id + ' has connected');
    var foo = setInterval (function () {
        socket.emit('foo');
    }, interval);   
    socket.on('confirmed', function () {
        console.log('confirmation received from ' + socket.id);
        clearInterval(foo);
    });     
});
console.log('socket.io server started at port 3000');

index.html的(在浏览器中打开它,看看会发生什么):

<!doctype html>
<html>
  <head>
    <title>Testing socket.io</title>
  </head>
  <body>
    <button id="button">Confirm</button>
    <p id="socket">waiting...</p>
    <p id="alert">foos counter: </p>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
    <script>
        var socket = io("http://localhost:3000");
        var counter;
        socket.on('connect', function() {
          counter = 0;
          document.getElementById("socket").innerHTML = "connected";
          document.getElementById("button").addEventListener("click", function () {
              socket.emit("confirmed");
          });
      });
      socket.on('foo', function() {
          counter++;
          document.getElementById("alert").innerHTML = "foos counter: " + counter;
      });
    </script>
  </body>
</html>


文章来源: socket.io emit in loop until client responds?