国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

singerye / 625人閱讀

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

說明:本文主要學(xué)習(xí)guzzlehttp/guzzle package的使用,該package提供了一套發(fā)送HTTP請求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è)人分享,對AWS開發(fā)感興趣的可以參看官方文檔AWS SDK for PHP,并且AWS提供了官方認(rèn)證考試:初級開發(fā)者證書AWS Certified Developer Associate,高級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)概念,這對提高個(gè)人設(shè)計(jì)代碼時(shí)的能力大有裨益。

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

Streams

一次HTTP請求是由起始行、消息頭、消息體組成的,消息體(payloads)可以是很小或者很大,如果使用字符串來存儲消息體的話,對于很大的消息體如一個(gè)大文件,用字符串存儲就會很消耗內(nèi)存,所以對于大消息體就需要使用Stream來表示。Guzzle使用了PsrHttpMessageStreamInterface來表示該Stream Objects,該接口也是對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提供了這些接口對應(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測試看下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測試爆綠燈:

    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測試爆綠燈:

    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測試爆綠燈:

    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請求。后續(xù)還會分享Guzzle Package相關(guān)使用,到時(shí)見。

RightCapital招聘Laravel DevOps

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21984.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    klinson 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<