猿问

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

我正在尝试在客户端服务器应用程序中的线程的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


开满天机
浏览 126回答 1
1回答

森林海

run()函数代码未发布,因此很难理解您的代码的实际部分。但是从您发布的代码i中,服务器中的变量在每个连接上都设置为1,随后在while / run循环中被修改。如果要保留i套接字连接之间的值,则必须在net.createServer回调之外(在全局范围内)定义它。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答