如何在与客户端连接并行工作的 nodejs 服务器中创建异步函数?

How to create an async function in a nodejs server that works in parallel with client connections?

我正在尝试在 nodeJS 中模拟客户端服务器应用程序中的线程,该应用程序以 20 毫秒的间隔修改数据,以及一个侦听器和一个发送器。监听器需要每隔 1 秒从服务器检查一次数据,发送器需要时向服务器发送一些信息。

我尝试创建服务器和连接客户端以读取数据的 setInterval,但似乎每次我连接客户端时,服务器重置中的所有数据和我的 运行 函数无法正常工作。

function sleep(time) {
    return function (callback) {
        setTimeout(function(){
            console.log(time);
            callback();
        }, time);
    }
}


var server = net.createServer(function (socket) {

    var i = 1;

    var totalTime = 1000;
    var time = 20;
    while (time<totalTime){
        run(function*(){
            i++;
            yield sleep(20);
            console.log("modified datas!"+ i);
        });
        time +=20;
    }




    socket.write('write to client\r\n');
    socket.pipe(socket);
});

server.listen(1337, '127.0.0.1');


setInterval(
    function () {
        var net = require('net');

        var client = "1";
        var i = 0;
        var client = new net.Socket();

        client.connect(1337, '127.0.0.1', function () {
            console.log('Connected');

            // client.write("Send from client");
        });



        client.on('data', function (data) {
            console.log('DATAS IN CLIENT:::: ' + data);
            i++;
            if (i == 2)
                client.destroy();
            // client.destroy(); // kill client after server's response
        });

        client.on('close', function () {
            console.log('Connection closed');
        });

    },
    6000
);

这是我现在的终端机。

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50
...

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50

我正在寻找连接新客户端时要继续的数据

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!1
20
modified datas!2
20
modified datas!3
20
modified datas!5
20
modified datas!6
...

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!7
20
modified datas!8
20
modified datas!9
20
modified datas!10
20
modified datas!11

运行() 函数代码未发布,因此很难理解代码的哪些部分实际在做什么。

但是从您发布的代码来看,服务器中的变量 i 在每个连接上都被设置为 1,随后在您的 while/run 循环中被修改。

如果您想在套接字连接之间保留 i 的值,您必须在 net.createServer 回调之外(在全局范围内)定义它。