如何在与客户端连接并行工作的 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
回调之外(在全局范围内)定义它。
我正在尝试在 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
回调之外(在全局范围内)定义它。