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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

PHP
元芳怎么了 2023-10-21 15:45:53
我在 nodejs 和 php 上編寫了一個腳本,它實現(xiàn)了相同的功能:ping API、檢索文件列表、循環(huán)遍歷每個文件并將它們下載到磁盤上的指定位置。左邊是nodejs,右邊是php。我觀察到,在 Nodejs 中每次嘗試時,某些文件都會隨機失敗。經(jīng)過某種嘗試后,所有文件也會成功。在 php 上,每次嘗試都是一致的,并且所有文件都可以正常下載。Nodejs 中是否缺少某些內(nèi)容,即默認情況下通過下載文件的請求未包含配置/標頭?或者下載多個文件需要在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 回答

?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

沒有任何神奇的標頭可以讓它在 Node.js 中工作。如果有時有效,而有時請求花費的時間太長,則服務器可能會由于速率限制而默默地丟棄請求。

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

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

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


查看完整回答
反對 回復 2023-10-21
  • 1 回答
  • 0 關注
  • 120 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號