我不知道我在这里缺少什么,但 Node 似乎将两个不同的请求解释为一个请求,除非您添加超时,例如在下面的代码中,当我写入服务器一和服务器二并将结果推送到数组时它只是组合两个字符串并将它们解释为一个字符串,而当我添加 10 毫秒的延迟时,它就会按照我需要的方式工作。
var arr = [];
var server = net.createServer(function(socket){
socket.on('data', function(data){
arr.push(data.toString());
});
}).listen(8080);
var connection = net.connect({host: 'localhost', port: 8080});
connection.write('one');
connection.write('two');
setTimeout(function() {
connection.write('three')
}, 10);
setTimeout(function() {
connection.write('four')
}, 20);
setTimeout(function() {
connection.write('five')
}, 30);
setTimeout(function(){
console.log(arr); //[ 'onetwo', 'three', 'four', 'five' ]
}, 2000);
最佳答案
这里的“请求”一词不正确。当你处理套接字时,你不会“请求”一些东西。套接字不等于http 请求。套接字是您可以读取和写入的数据源。当套接字读取时,数据在发送之前如何分割是没有意义的 - 它读取读取时可用的所有数据。
如果您将多个缓冲区连续写入同一个套接字,那么当内核唤醒套接字以处理数据时,第二次写入的数据很可能已经到达并在同一个读取操作中进行处理。
当您设置 10 毫秒超时时,您会间隔读取操作,从而确保数据被拆分。
关于javascript - 为什么 ('data' ) 监听器会将 2 个不同的请求解释为一个,除非您添加超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516684/