国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

「分享創(chuàng)造」在Workerman中使用GuzzleHttp協程版實現無感異步請求

cclilshy

簡介

PRipple協程引擎是一個100%原生PHP代碼實現的現代化協程引擎,不依賴任何擴展,
可以在任何PHP環(huán)境(FPM/CLI)下運行, 本組件是基于該引擎開發(fā)的GuzzleHttp的異步請求插件,
既保留了GuzzleHttp的所有功能(上傳/下載等),又支持協程異步請求

環(huán)境要求

PHP >= 8.1

Linux/Unix 系統

安裝

Composer 安裝

composer require cclilshy/p-ripple-drive

Webman 配置

配置 config/server.php 文件

<?php
return [
    //...
    'event_loop' => \Psc\Drive\Workerman\PDrive::class,
];

Workerman 配置

//...
Worker::$eventLoop = \Psc\Drive\Workerman\PDrive::class;

使用方法

手動創(chuàng)建

public function index(Request $request): string
{
    $handle = new \Psc\Plugins\Guzzle\PHandler([
       'pool' => 1 // 是否啟用Http長連接
    ]);
    $client = new \GuzzleHttp\Client(['handle' => $handle]);

    // 發(fā)送請求(即使該請求耗時很長, 也不會堵塞當前進程的其他請求)
    $response = $client->get('http://www.baidu.com');
    return $response->getBody()->getContents();
}

全局使用(薦)

public function index(Request $request): string
{
    $client = \P\Plugin::Guzzle();

    // 發(fā)送請求(即使該請求耗時很長, 也不會堵塞當前進程的其他請求)
    $response = $client->get('http://www.baidu.com');
    return $response->getBody()->getContents();
}

效果演示

public function index(Request $request): string
{
    for ($i = 0; $i < 100; $i++) {
        \P\async(function () use ($i) {
            $response           = \P\Plugin::Guzzle()->get('https://www.qq.com/');
            $time               = microtime(true);
            $responseStatusCode = $response->getStatusCode();
            var_dump("[{$time}]request {$i} status: {$responseStatusCode}");
        });
    }
    return 'hello,world';
}

2628 12 9
12個評論

兔白白

... 感覺這玩意 出生的有點晚了。 對于耗時的業(yè)務流程,現在常規(guī)做法都是丟redis隊列里面慢慢跑了..不過 感覺這個比隊列還是方便些,比如一些保存文件。之類的操作,那就可以直接把保存的路徑返回回去 后臺這邊慢慢保存文件了。 不需要東寫一句 西寫一句了

初心by

  • 暫無評論
liudada1204

  • 暫無評論
軟飯工程師

截圖
截圖
請問 安裝了擴展,config/server.php 也修改了配置,為什么還是提示async 方法不存在

xiaoming

穩(wěn)定嗎

  • 暫無評論
深林孤鷹

太強了,真是個好東西!

  • 暫無評論
深林孤鷹

剛才測試的時候,用了之前文章里的:
$response = \P\await(\P\Plugin::Guzzle()->getAsync('https://www.baidu.com'));
不知為何沒效果;

另外,截圖
好像缺了很多訪問,我用的webman單進程測試的。。

  • cclilshy 2024-08-11

    $response = \P\Plugin::Guzzle()->get('https://www.baidu.com'); 直接這樣就可以兄弟

  • 深林孤鷹 2024-08-11

    嗯,后來我這樣寫了,但是出現了上圖的問題,很多request沒有出現

  • cclilshy 2024-08-12

    可能是并發(fā)高出現的請求錯誤,try捕獲以下看看

  • 深林孤鷹 2024-08-12

    試了一下:

        for ($i = 0; $i < 30; $i++) {
            \P\async(function () use ($i) {
                try {
                    $response = \P\Plugin::Guzzle()->get('https://www.qq.com');
                    $time = microtime(true);
                    $responseStatusCode = $response->getStatusCode();
                    var_dump("[{$time}] request {$i} status: {$responseStatusCode}");
                } catch (\Exception $e) {
                    var_dump($e->getMessage());
                } catch (\Throwable $e) {
                    var_dump($e->getMessage());
                } finally {
                }
            });

    沒有捕獲到異常,仍然是丟了Request,有時能丟個70%左右。。。

  • cclilshy 2024-08-12

    設置一個timeout看看

  • cclilshy 2024-08-12

    按照guzzle的方式設置就行了

  • 深林孤鷹 2024-08-12

    搞定了,確實是Request timeout的問題,謝謝大佬~
    另外請問一下這個能用在生產環(huán)境嗎?

  • cclilshy 2024-08-12

    最近在寫單元測試,到覆蓋率全面那時call你

  • 深林孤鷹 2024-08-12

    好的,辛苦,我作為用戶來幫忙測試^^
    昨天看了文檔,可能我比較菜,有些地方不太明白,有群能交流嗎?

  • cclilshy 2024-08-12

    可以在webman群call我嘿嘿

  • 深林孤鷹 2024-08-12

    了解~

  • cclilshy 2024-08-28

    上車吧兄弟

  • 深林孤鷹 2024-09-01

    已在我個人項目中使用,等你的ORM+協程出來我上正式項目

軟飯工程師

截圖
你好,這個好像發(fā)送post 請求接收不到數據,是我使用方式有問題嗎

    public function test11()
    {
        $data = ['name' => 'tom', 'age' => 10];
        \P\async(function () use ($data) {
            \P\Plugin::Guzzle()->post('http://127.0.0.1:18787/index/test12', [
                'json' => $data,
            ]);
        });
        return 'ok';
    }
    public function test12(Request $request)
    {
        $res = $request->all();
        var_dump($res);
        return true;
    }
    public function test13()
    {
        $data = ['name' => 'tom', 'age' => 10];
        $client = new \GuzzleHttp\Client();
        $client->post('http://127.0.0.1:18787/index/test12', [
            'json' => $data,
        ]);
    }
  • cclilshy 2024-08-13

    你好,debug一下webman控制器$request的header()和recvBuffer部分看看呢?

  • cclilshy 2024-08-13

    這是頭部沒有自動加入content-length導致的,
    已在下個版本解決,詳見
    https://github.com/cloudtay/p-ripple-core/commit/f9cc669d9eeac09d44b2673a31140ba146470973

    現在可以通過這個方式解決1

    \P\async(function () {
        $data = ['name' => 'tom', 'age' => 10];
        $body = json_encode($data);
        \P\Plugin::Guzzle()->post('http://127.0.0.1:8787/index/test12', [
            'body'    => $body,
            'headers' => [
                'Content-Type'   => 'application/json',
                'Content-Length' => strlen($body),
            ],
        ]);
    });
  • 軟飯工程師 2024-08-13

    截圖牛啊,上面那個問題好了,測試發(fā)現協程發(fā)送超過1000個請求就會失敗,進程直接退出

        public function test9(Request $request): string
        {
            for ($i = 0; $i < 1000; $i++) {
                \P\async(function () use ($i) {
                    $response = \P\Plugin::Guzzle()->get('https://www.qq.com/');
                    $time = microtime(true);
                    $responseStatusCode = $response->getStatusCode();
                    var_dump("[{$time}]request {$i} status: {$responseStatusCode}");
                });
            }
            return 'hello,world';
        }
  • cclilshy 2024-08-13

    ??正常,系統最大文件描述符拉高一下

  • 軟飯工程師 2024-10-10

    有沒有什么比較好的辦法控制一下并發(fā)數量呢

tanhongbin

大佬 這玩意 windows系統安裝不了呀 擴展沒有 哈哈

  • 暫無評論
liwenshu

windows 可以用嗎

  • tanhongbin 2024-09-03

    沒有擴展 windows 天生沒有多進程擴展哈哈 搜索不到

  • cclilshy 2024-09-04

    @tanhongbin 可以用的最新版本已經兼容windows

  • tanhongbin 2024-09-04

    win10 composer 安裝的時候 會讓你安裝 多進程擴展 然而win php沒有 哈哈

  • cclilshy 2024-09-04

    --ignore-platform-reqs就可以, 暫時還沒移掉這個聲明而已

  • tanhongbin 2024-09-04

    一會試試

shiroi

跟amp不差不多嗎

lsmir2

Error: Call to undefined method Psc\Plugins\Guzzle\Guzzle::get();這里的代碼跑不通,更新了.希望大佬可以改下嗎?
然后 官網文檔是打不開被墻了.希望多些代碼例子.

  • 暫無評論

cclilshy

520
積分
0
獲贊數
0
粉絲數
2024-04-09 加入
??