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

问题描述 投票:1回答:1

我正在尝试在客户端服务器应用程序中的一个线程的nodeJS中进行模拟,该应用程序以20ms的间隔修改数据以及一个侦听器和一个发送器。 lisener需要每隔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
javascript node.js asynchronous client-server
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.