亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Laravel學(xué)習(xí)筆記之Core Concepts in Guzzle Package——Strea

singerye / 694人閱讀

摘要:使用了來表示該,該接口也是對(duì)的抽象,暴露了一些常用方法判斷是否滿足要求的方法的讀寫相關(guān)操作獲取元數(shù)據(jù)方法操作指針相關(guān)方法等等。本篇主要學(xué)習(xí)下相關(guān)使用。后續(xù)還會(huì)分享相關(guān)使用,到時(shí)見。

說明:本文主要學(xué)習(xí)guzzlehttp/guzzle package的使用,該package提供了一套發(fā)送HTTP請(qǐng)求API,就像phpunit package, mockery package, symfony package, monolog package, league/filesystem package一樣,是一個(gè)經(jīng)常被使用的package,也是Laravel框架的一個(gè)重要依賴之一。AWS SDK for PHP也是把該package作為一個(gè)基礎(chǔ)package來使用,以后也想就AWS SDK for PHP做一些個(gè)人分享,對(duì)AWS開發(fā)感興趣的可以參看官方文檔AWS SDK for PHP,并且AWS提供了官方認(rèn)證考試:初級(jí)開發(fā)者證書AWS Certified Developer Associate,高級(jí)DevOps工程師證書AWS Certified DevOps Engineer Professional,感興趣可以參考官網(wǎng):AWS Certification。學(xué)習(xí)Laravel不僅僅需要學(xué)習(xí)框架的使用和源碼,也需要學(xué)習(xí)這些常用package的使用,這些優(yōu)秀的package提供了很多代碼設(shè)計(jì)思想和架構(gòu)概念,這對(duì)提高個(gè)人設(shè)計(jì)代碼時(shí)的能力大有裨益。

本小篇主要學(xué)習(xí)下Guzzle packageStream概念和使用,如果對(duì)Guzzle package不是很了解可以看下官網(wǎng)Guzzle。

Streams

一次HTTP請(qǐng)求是由起始行、消息頭、消息體組成的,消息體(payloads)可以是很小或者很大,如果使用字符串來存儲(chǔ)消息體的話,對(duì)于很大的消息體如一個(gè)大文件,用字符串存儲(chǔ)就會(huì)很消耗內(nèi)存,所以對(duì)于大消息體就需要使用Stream來表示。Guzzle使用了PsrHttpMessageStreamInterface來表示該Stream Objects,該接口也是對(duì)PHP Streams的抽象,暴露了一些常用方法:判斷stream是否滿足要求的方法,isReadable(), isWriable(), isSeekable();stream的讀寫相關(guān)操作,read(), write(), close();獲取元數(shù)據(jù)方法,getMetadata(), getSize();stream操作指針相關(guān)方法,rewind(), tell(), eof(), seek(),等等。

在psr/http-message package中提供了如下接口:PsrHttpMessageStreamInterface, PsrHttpMessageRequestInterface, PsrHttpMessageServerRequestInterface, PsrHttpMessageResponseInterface, PsrHttpMessageMessageInterface, PsrHttpMessageUriInterface, PsrHttpMessageUploadedFileInterface。而guzzle/psr7 package提供了這些接口對(duì)應(yīng)的實(shí)現(xiàn):GuzzleHttpPsr7Stream, GuzzleHttpPsr7Request, GuzzleHttpPsr7ServerRequest, GuzzleHttpPsr7Response, GuzzleHttpPsr7Message, GuzzleHttpPsr7Uri, GuzzleHttpPsr7UploadedFile。

本篇主要學(xué)習(xí)下GuzzleHttpPsr7Stream相關(guān)使用。

Creating Streams

構(gòu)造一個(gè)stream最好方式是使用GuzzleHttpPsr7stream_for,該方法可以接收string, resources from open(), object implements __toString() or PsrHttpMessageStreamInterface, callables, iterators,寫一個(gè)PHPUnit測(cè)試看下stream的創(chuàng)建,爆綠燈:

// tests/Guzzle/StreamTest.php
namespace AppTestsGuzzle;

class StreamTest extends TestCase
{
    public function testCreatingStringStream()
    {
        /** @var GuzzleHttpPsr7Stream $stream */
        $stream = GuzzleHttpPsr7stream_for("Laravel is a stream.");

        $this->assertEquals("Laravel is a stream.", $stream);

        $stream = GuzzleHttpPsr7stream_for("Laravel is a stream.");

        $this->assertEquals("Laravel", $stream->read(7));
        $this->assertEquals(" is a stream.", $stream->getContents());
        $this->assertEquals(true, $stream->eof());
        $this->assertEquals(20, $stream->tell());
    }
}

// tests/Guzzle/TestCase.php
namespace AppTestsGuzzle;

use AppTestsTestCase as BaseCase;

abstract class TestCase extends BaseCase
{
}

還可以把iterator作為參數(shù)來構(gòu)造stream,PHPUnit測(cè)試爆綠燈:

    public function testCreatingIteratorStream()
    {
        $generator = function ($num) {
            for ($i = 0; $i < $num; $i++) {
                yield "laravel.";
            }
        };

        $stream = GuzzleHttpPsr7stream_for($generator(3));

        $this->assertEquals("laravel.laravel.laravel.", $stream->read(24));
    }

還可以把一個(gè)resource作為參數(shù)來構(gòu)造stream,PHPUnit測(cè)試爆綠燈:

    public function testResourceStreamMetadata()
    {
        $resource = fopen(storage_path("/logs/laravel.log"), "r");
        $stream   = GuzzleHttpPsr7stream_for($resource);

        $this->assertEquals(storage_path("/logs/laravel.log"), $stream->getMetadata("uri"));
        $this->assertTrue($stream->isReadable());
        $this->assertFalse($stream->isWritable());
        $this->assertTrue($stream->isSeekable());
    }
Stream Decorators

Guzzle也提供了一些Stream Decorators來修飾stream handlers,這些Decorators主要包括以下幾種:

AppendStream

BufferStream

CachingStream

DroppingStream

FnStream

InflateStream

LazyOpenStream

LimitStream

NoSeekStream

PumpStream

這里僅僅以GuzzleHttpPsr7AppendStream為例說明下Stream Decorator的使用,其他的Decorator可以參考官網(wǎng)。AppendStream修飾器顧名思義就是可以讀取多個(gè)stream并拼接成一個(gè)stream,PHPUnit測(cè)試爆綠燈:

    public function testAppendStream()
    {
        $stream1       = GuzzleHttpPsr7stream_for("Laravel");
        $stream2       = GuzzleHttpPsr7stream_for(" is ");
        $stream3       = GuzzleHttpPsr7stream_for("great!!!");
        $append_stream = new GuzzleHttpPsr7AppendStream([$stream1, $stream2]);

        $append_stream->addStream($stream3);

        $this->assertEquals("Laravel is great!!!", $append_stream);
    }

總結(jié):學(xué)習(xí)Guzzle Package的使用是必要的,該package經(jīng)常作為一個(gè)重要依賴被其他package使用,比如AWS SDK for PHP就嚴(yán)重使用該package來做HTTP請(qǐng)求。后續(xù)還會(huì)分享Guzzle Package相關(guān)使用,到時(shí)見。

RightCapital招聘Laravel DevOps

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/21984.html

相關(guān)文章

  • Laravel學(xué)習(xí)筆記Filesystem-從Dropbox中下載文件到AWS S3

    摘要:說明本文主要講述了的文件系統(tǒng)的小,邏輯不復(fù)雜,主要就是把上的一個(gè)文件下載到本地,和下載到中。寫驅(qū)動(dòng)由于沒有驅(qū)動(dòng),需要自定義下在中寫上名為的驅(qū)動(dòng)同時(shí)在注冊(cè)下該就行。執(zhí)行命令后,顯示上文件從上下載到上的文件該邏輯簡(jiǎn)單,但很好玩。 說明:本文主要講述了Laravel的文件系統(tǒng)Filesystem的小Demo,邏輯不復(fù)雜,主要就是把Dropbox上的一個(gè)文件下載到本地local,和下載到AWS...

    tylin 評(píng)論0 收藏0
  • PHP發(fā)送和接收J(rèn)SON請(qǐng)求

    摘要:發(fā)送接受是個(gè)可以訪問請(qǐng)求的原始數(shù)據(jù)的只讀流。在之前打開的數(shù)據(jù)流只能讀取一次數(shù)據(jù)流不支持操作。不過,依賴于的實(shí)現(xiàn),請(qǐng)求體數(shù)據(jù)被保存的時(shí)候,它可以打開另一個(gè)數(shù)據(jù)流并重新讀取。 現(xiàn)在微服務(wù)中,很多API由于需要傳遞的參數(shù)較多所以要求用包含所有參數(shù)的JSON數(shù)據(jù)作為POST請(qǐng)求的請(qǐng)求體來替代FormData傳遞參數(shù)的方式,在參數(shù)量較多時(shí)POST JSON要比POST FormData便于開發(fā)和...

    PiscesYE 評(píng)論0 收藏0
  • Laravel 學(xué)習(xí)筆記 Toran Proxy 搭建私有Packagist鏡像

    摘要:可以使用來做,也是作者開發(fā)的,可靠性也有保證。不管怎樣,總會(huì)遇到很多不僅僅一個(gè)需要的,這個(gè)具有公用性的就可以做成一個(gè)放在公司內(nèi)部搭建的鏡像上,這也極大提高整體的開發(fā)效率。 隨著業(yè)務(wù)越來越復(fù)雜,有些service具有通用性,即Repo A中的某一service其他的幾個(gè)Repo都會(huì)不同程度的需要,如果能把該service作為一個(gè)獨(dú)立的package,這樣其他的Repo可以composer...

    senntyou 評(píng)論0 收藏0
  • Laravel 下使用 Guzzle 編寫多線程爬蟲實(shí)戰(zhàn)

    摘要:本文經(jīng)授權(quán)轉(zhuǎn)自社區(qū)說明庫(kù)是一套強(qiáng)大的請(qǐng)求套件。本文重點(diǎn)演示如何使用發(fā)起多線程請(qǐng)求。 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 說明 Guzzle 庫(kù)是一套強(qiáng)大的 PHP HTTP 請(qǐng)求套件。 本文重點(diǎn)演示如何使用 Guzzle 發(fā)起多線程請(qǐng)求。 參考 Github 官方用戶接口文檔 Guzzle 并發(fā)請(qǐng)求文檔 Laravel LTS 5.1 - Artisan 文檔 創(chuàng)建命令 1. 運(yùn)行...

    hzx 評(píng)論0 收藏0
  • PHP新手開發(fā)者的路線建議

    摘要:年開發(fā)者應(yīng)該熟練使用,并且知道版本更新內(nèi)容。對(duì)開發(fā)和運(yùn)維人員來說,最希望的就是一次性創(chuàng)建或配置,可以在任意地方正常運(yùn)行。是標(biāo)準(zhǔn)規(guī)范,是開發(fā)的實(shí)踐標(biāo)準(zhǔn)。對(duì)開發(fā)者來說語言推薦和,全棧的選擇非常多,推薦熱門的 前言 在前天(2018-08-02)已經(jīng)發(fā)布了PHP 7.3.0.beta1 Released 如果你還沒有使用 PHP7 ,那真的很遺憾。2018年P(guān)HP開發(fā)者應(yīng)該熟練使用 PHP7...

    klinson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<