javascript - 如何在与客户端连接并行工作的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
解决方案
run() 函数代码未发布,因此很难理解代码的哪些部分实际在做什么。
但是从您发布的代码i
中,服务器中的变量在每个连接上都设置为 1,然后在您的 while/run 循环中进行修改。
如果要保留i
套接字连接之间的值,则必须在net.createServer
回调之外(在全局范围内)定义它。
推荐阅读
- swift - 在 ARKit 中渲染新图像时如何清除内存?
- sql-server - 我想在使用 smslib 时将数据从附加日志插入到 sql 表中
- oracle - Oracle左连接给出重复
- node.js - 未连接到运行时
- android - ConstraintLayout 的求解器无法正确测量包含
- velo - wixLocation.to() - 如何使用 wixLoation.to() 转移到动态页面
- javascript - 如何在 Angular 的“then”链中返回?
- inheritance - 运行程序时不显示 JavaFX Circle() 形状
- android - 如何在 TabBarView 中集成 SliverGrid?
- c# - 错误:找不到“project.assets.json”。运行 NuGet 包还原以生成此文件