內(nèi)網(wǎng)搭建的workerman http 服務(wù)上傳文件接口,我這邊測試了,上傳71kb的圖片,一共花費10多秒?
這邊查看TcpConnnection類baseRead方法那邊的代碼打印,發(fā)現(xiàn)卡在觸發(fā) event 讀取socket的事件發(fā)生很慢,但是baseRead方法執(zhí)行很快的, 就是觸發(fā)執(zhí)行者方法的事件很慢;網(wǎng)速方面,都是局域網(wǎng),這邊測試了網(wǎng)速都有 每秒3M的傳輸速度,不是卡在上傳速度,為什么觸發(fā) event 讀的事件很慢? 大神walkor幫忙解答一下哈?
代碼都是用框架workerman的代碼,沒動過的。
我截一下我打印的日志,如下圖
如上圖,上傳70多kb的圖片,觸發(fā)baseRead 10多次,且很慢觸發(fā)。
運行命令 tcpdump -Ans 512 -iany port 8787 看下數(shù)據(jù)從開始傳輸?shù)絺鬏斖戤呌昧硕嗑?,如果很慢的話就是網(wǎng)絡(luò)傳輸問題
我剛剛測了一下,用curl傳輸圖片很快,然后用瀏覽器 ajax傳輸很慢,都是走局域網(wǎng),很奇怪
var data = new FormData();
let objThis = document.getElementById('file_album');
let tFileArr = [];
for (i = 0; i < objThis.files.length; i++) {
//tFileArr.push(objThis.files[i]);
data.append('sys_file_' + i, objThis.files[i]);
}
$.ajax({
url:"XXXXXXXXXXXXXXXXXX",
timeout : 1000 * 300,
contentType:false, //jQuery不要去設(shè)置Content-Type請求頭
processData:false, //jQuery不要去處理發(fā)送的數(shù)據(jù)
type:"post",
cache:false, //不緩存
dataType:'json', //返回類型json
data: data, //表單數(shù)據(jù)
success:function (res) {
console.log(res);
},
error:function (error) {
console.log(error);
}
});
php curl 代碼模擬上傳圖片如下: 很快
<?php
function upload_image( $url , $file =null, $header =null) {
$curl= curl_init ();
curl_setopt ( $curl, CURLOPT_URL, $url);
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );
//攜帶cookie文件
// if(! empty($cookie)){
// curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //讀取cookie
// }
//攜帶頭
if(!empty($header)){
$newHeader = [];
foreach ($header as $k => $v){
$newHeader[] = $k.': '.$v;
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $newHeader);
curl_setopt($curl, CURLOPT_HEADER, 1);//返回response頭部信息
}
//curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
//$body = new \CURLFile('@'.realpath($file['path']));
$body = curl_file_create($file['path'],$file['type'],$file['name']);
//return $body;
$fileData = ['upfile'=>$body];
//發(fā)送post數(shù)據(jù)
curl_setopt ( $curl, CURLOPT_POST, 1 );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $fileData);
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($curl, CURLOPT_ACCEPT_ENCODING, "gzip,deflate");
$output= curl_exec ( $curl);
if(empty($output)) return false;
curl_close ( $curl);
return $output;
}
$header = [
'timeout' => 300,
'verify' => false,
'proxy' => '',
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
'Referer' => 'https://www.xxxx.com/',
'Accept-Encoding' => 'gzip, deflate, br',
'Cookie' => "shopeasy_PHPSESSID=PKoxz8",
"Connection" => "Keep-Alive",
"Keep-Alive" => "300",
]
];
//發(fā)布文章
$header['headers']['Referer'] = 'http://192.168.0.7:5003';
//判斷是否有圖片需要上傳
//$fielPath = public_path('uploads').'/'.$data->image;
$fielPath = realpath("./testa.jpg");
//b.jfif
$fielPath = realpath("./b.jfif");
$header['headers']['Host'] = '192.168.0.7:5003';
$header['headers']['Origin'] = 'http://192.168.0.7';
$filename = basename($fielPath);
$imageArr = getimagesize($fielPath);
$fileData = [
// 'media' => '@'.$fielPath,
'path'=>$fielPath,
'type'=>$imageArr['mime'],
'name'=>$filename
];
$uploadUrl = 'http://192.168.0.7:5003/?ct=file&ac=upload';
$header['headers']['Content-Type'] = 'multipart/form-data';
$header['headers']['Content-Disposition'] = 'multipart/form-data;name="upfile"; filename="'.$filename.'"';
$imageRes = upload_image($uploadUrl,$fileData,$header['headers']);
print_r($imageRes);