Javascript 为什么on(';data';)侦听器将两个不同的请求解释为一个请求,除非您添加超时
我不知道这里缺少什么,但node似乎将两个不同的请求解释为一个请求,除非您添加超时,例如在下面的代码中,当我写入服务器1和服务器2并将结果推送到数组时,它只是将两个字符串组合在一起,并将它们解释为一个,然而,当我加上10毫秒的延迟,那么它的工作方式,我需要它Javascript 为什么on(';data';)侦听器将两个不同的请求解释为一个请求,除非您添加超时,javascript,node.js,Javascript,Node.js,我不知道这里缺少什么,但node似乎将两个不同的请求解释为一个请求,除非您添加超时,例如在下面的代码中,当我写入服务器1和服务器2并将结果推送到数组时,它只是将两个字符串组合在一起,并将它们解释为一个,然而,当我加上10毫秒的延迟,那么它的工作方式,我需要它 var arr = []; var server = net.createServer(function(socket){ socket.on('data', function(data){ arr.push(data.toS
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毫秒的超时时间时,您将间隔读取操作,从而确保数据被分割。您有一个全局数组正在推入。。。当然,它们是“以相同的方式处理”的,您将两个请求的上下文放在同一个位置。