第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用nodejs下載多個(gè)文件不一致,但使用php則不然

使用nodejs下載多個(gè)文件不一致,但使用php則不然

PHP
元芳怎么了 2023-10-21 15:45:53
我在 nodejs 和 php 上編寫(xiě)了一個(gè)腳本,它實(shí)現(xiàn)了相同的功能:ping API、檢索文件列表、循環(huán)遍歷每個(gè)文件并將它們下載到磁盤(pán)上的指定位置。左邊是nodejs,右邊是php。我觀察到,在 Nodejs 中每次嘗試時(shí),某些文件都會(huì)隨機(jī)失敗。經(jīng)過(guò)某種嘗試后,所有文件也會(huì)成功。在 php 上,每次嘗試都是一致的,并且所有文件都可以正常下載。Nodejs 中是否缺少某些內(nèi)容,即默認(rèn)情況下通過(guò)下載文件的請(qǐng)求未包含配置/標(biāo)頭?或者下載多個(gè)文件需要在nodejs中以不同的方式處理嗎?Nodejs代碼:const http = require('https');const fs = require('fs');function getResponse(url, callback) {    http.get(url, response => {        let body = '';        response.on('data', data => {            body += data        })        response.on('end', () => {            callback(JSON.parse(body))        })    })}var download = function (url, dest, callback) {    http.get(url, response => {        response.on('error', function (err) {            console.log(err)        })            .pipe(fs.createWriteStream(dest))            .on('close', callback)    });};getResponse('https://wallhaven.cc/api/v1/search?page=1', json => {    json.data.forEach((item, index) => {        download(item.path, `files/file-${index}.jpg`, function () {            console.log('Finished Downloading' + `file-${index}.jpg`)        });    })})PHP代碼    $client = new \GuzzleHttp\Client();    $response = $client->get('https://wallhaven.cc/api/v1/search?page=1');    $json = json_decode((string)$response->getBody());    $rows = $json->data;    foreach ($rows as $index => $row) {        $content = file_get_contents($row->path);        Storage::put("files/file-$index.jpg", $content);    }    return 'done';
查看完整描述

1 回答

?
慕無(wú)忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

沒(méi)有任何神奇的標(biāo)頭可以讓它在 Node.js 中工作。如果有時(shí)有效,而有時(shí)請(qǐng)求花費(fèi)的時(shí)間太長(zhǎng),則服務(wù)器可能會(huì)由于速率限制而默默地丟棄請(qǐng)求。

我可以看出 PHP 是同步的,它將每個(gè)文件一個(gè)接一個(gè)地下載到內(nèi)存中,然后放入一個(gè)文件中,而在 Node.js 中,您可以立即觸發(fā)每個(gè)請(qǐng)求并立即處理所有請(qǐng)求,將內(nèi)容流式傳輸?shù)轿募?。接收到亂序數(shù)據(jù)包是正常的,TCP 協(xié)議可確保它們重新組合在一起。Node.js 能夠執(zhí)行類(lèi)似的操作,您很可能會(huì)遇到服務(wù)器的安全功能或其他限制。

如果時(shí)間不是問(wèn)題,我建議修改 Node.js 來(lái)減慢請(qǐng)求速度,可以通過(guò)限制并發(fā)請(qǐng)求的數(shù)量,也可以逐個(gè)執(zhí)行(最簡(jiǎn)單的選項(xiàng),請(qǐng)參閱 、promise、axios 庫(kù))async/await。繼您的 Reddit 帖子之后,學(xué)習(xí) C++ 來(lái)完成這項(xiàng)任務(wù)很可能不會(huì)產(chǎn)生任何好處。事實(shí)上,這會(huì)困難幾個(gè)數(shù)量級(jí)。Node.js 是一個(gè)非常強(qiáng)大的平臺(tái),其功能遠(yuǎn)不止下載文件。

在不知道問(wèn)題的真正原因的情況下,除了嘗試分析您的請(qǐng)求并了解它們哪里出了問(wèn)題之外,我無(wú)法提供更多建議。


查看完整回答
反對(duì) 回復(fù) 2023-10-21
  • 1 回答
  • 0 關(guān)注
  • 137 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)