首页 > 解决方案 > 如何在与客户端连接并行工作的nodejs服务器中创建异步函数?

问题描述

我正在尝试在 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

标签: javascriptnode.jsasynchronousclient-server

解决方案


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

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

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


推荐阅读