为什么on('data')侦听器将两个不同的请求解释为一个,除非添加超时
Why does on('data') listener interpret 2 different requests as one unless you add timeout
我不知道这里缺少了什么,但除非添加超时,否则节点似乎会将两个不同的请求解释为一个请求。例如,在下面的代码中,当我写入服务器一和二并将结果推送到数组时,它只是将两个字符串组合起来并将它们解释为一,而当我添加10ms延迟时,它会按照我需要的方式工作。
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毫秒的超时时,您会间隔读取操作,从而确保数据被拆分。
相关文章:
- 有人能向我解释一下我犯的一个错误吗
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 有人能向我解释一下为什么我们在这个函数中需要一个for循环吗
- 有人能用一个真实的例子来解释JavaScript中函数和方法的区别吗
- 生成一个与Javascript字符串匹配的Regex对象.解释方法
- 在构建应用程序Javascript MVC的过程中,score/buildjs抛出了一个没有解释的错误
- 排序()-想要一个好的解释
- 很难解释,一个奇怪的javascript鼠标悬停问题
- 琐碎的for循环需要一个解释
- 为什么on('data')侦听器将两个不同的请求解释为一个,除非添加超时
- javascript函数引用和一个参数传递的解释
- Regex -创建一个正确解释数字的输入/文本区域
- 有人能解释一下这个错误吗:期望一个赋值或函数调用,却看到了一个表达式
- 寻找另一个正则表达式解释
- 尝试创建一个能够解释空格的回文函数
- 我试图分析以下js代码.这是一个待办事项列表程序.有人能解释一下每一步发生了什么吗?
- regexp对象的一个很好的解释是什么?
- 有多少个问号?和冒号"; "在一个语句解释在javascript?(条件操作符)
- 有人能解释一下下面javascript代码的最后一个输出是如何产生的吗
- 从另外两个元素创建一个jquery元素(代码解释请求)