先贴出 client 和 server 的代码,node 的版本号为 v8.1.2
服务端代码:
// buffer_server.js
const fs = require('fs');
const http = require('http');
const zlib = require('zlib');
const server = http.createServer((req, res) => {
let index = 0;
req.on('data', function(chunk) {
console.log(++index, chunk.length);
});
res.end('OK');
})
server.listen(3001, () => {
console.log('started');
});
客户端代码:
// buffer_client.js
const fs = require('fs');
const http = require('http');
const zlib = require('zlib');
const path = require('path');
const filename = process.argv[2];
const server = process.argv[3];
const options = {
port: 3001,
hostname: server,
method: 'PUT',
protocol: 'http:',
headers: {
filename: path.basename(filename),
'Content-Encoding': 'gzib'
}
}
const req = http.request(options, (res) => {
console.log('client done');
})
fs.readFile(filename, (err, buffer) => {
console.log('获取文件完毕\n');
console.log('开始压缩');
zlib.gzip(buffer, (err, buffer) => {
console.log('压缩完毕');
console.log(buffer.length); // 1336191186 1.2G 左右的文件
req.write(new Buffer(1336191186));
req.end();
})
})
req.on('error', (err) => {
console.log(err);
/**
*
* 出现的错误:
*
* { Error: read ECONNRESET
at exports._errnoException (util.js:1016:11)
at TCP.onread (net.js:609:25) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }
*/
})
req.on('data', (data) => {
console.log(data, 'data');
})
```
问题是,在上传 1.2GB 左右的压缩文件,一次性去通过 write 去发送给 server 之后,client 会报错,报错信息如下:
```
{ Error: read ECONNRESET
at exports._errnoException (util.js:1016:11)
at TCP.onread (net.js:609:25) code: 'ECONNRESET', errno: 'ECONNRESET', syscall: 'read' }
```
我自己判定是因为一次性 write 的 buffer 数量太大造成的,求解具体原因 谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.