我遇到了各种奇怪的行为。我创建了一个简化问题的小测试 我有一个简单的POST休息API,它应该解析我作为multipart / form-data内容类型得到的图像。
这是服务器的重要代码部分:
var upload = multer({
storage: multer.memoryStorage(),
limits: {
files: 1,
fileSize: 1024 * 1024 * 5// 5 MB
}
}).any();
app.post('/v(\\d+)/image', function (req, res) {
upload(req, res, function (err) {
if (err) {
console.log('upload image to server failed-' + (err.code || err), `uploadImage`);
res.status(500).json({err: (err.code || err)});
return;
}
console.log('upload image to server succeed');
});
这是每隔x秒发布一次请求的测试:
var request = require('request');
var fs= require('fs');
var formData = {
"image_context_type": 1,
attachments: [
fs.createReadStream(file_dir)
]
};
for (i = 0; i < 10; i++) {
setTimeout(function(){
formData.image_uid = uuid.v4();
request.post({
url: 'http://<server ip>:8888/v1/image', formData: formData
}, function (err, res, body) {
console.log('err-' + err);
console.log('res-' + res.statusCode);
});
}, 1000*i);
}
行为: 在1秒超时(1000毫秒)的情况下,只有我发送的第一个图像进入服务器回调上传部分(其余部分被卡住)。
在0秒超时(0毫秒)的情况下,我发送的所有图像都到达服务器回调上传部分(其余部分被卡住)。
这只发生在EC2 Ubuntu 14.04机器上,即使从同一台EC2机器(localhost)执行测试也是如此。我无法在我的开发本地VM上重现它。