Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么on(';data';)侦听器将两个不同的请求解释为一个请求,除非您添加超时_Javascript_Node.js - Fatal编程技术网

Javascript 为什么on(';data';)侦听器将两个不同的请求解释为一个请求,除非您添加超时

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

我不知道这里缺少什么,但node似乎将两个不同的请求解释为一个请求,除非您添加超时,例如在下面的代码中,当我写入服务器1和服务器2并将结果推送到数组时,它只是将两个字符串组合在一起,并将它们解释为一个,然而,当我加上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毫秒的超时时间时,您将间隔读取操作,从而确保数据被分割。

您有一个全局数组正在推入。。。当然,它们是“以相同的方式处理”的,您将两个请求的上下文放在同一个位置。