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

webman怎樣序列化當前的Request

yskj

問題描述

Webman
環(huán)境:

workerman/webman-framework         1.5.16
workerman/workerman                dev-master            (題外話,期待V5發(fā)布)

我想在當前請求的時候, 異步統(tǒng)計一些東西(可能有多重操作),所以打算序列化對象,異步消費去處理。
參數(shù)較多,所以不想一一拿出來處理 。 比如Request的路由,路由參數(shù),請求參數(shù)等。
發(fā)現(xiàn)直接調用
1.

serialize(request());

2.

$originReq = clone request();
serialize($originReq);

是會報錯的, 如下:

Exception: Serialization of 'Fiber' is not allowed。。

為此你搜索到了哪些方案及不適用的原因

有看到建議在 入隊列前,賦值好需要的參數(shù)。。

但因為有同步處理時留下的代碼,直接依賴了Request,所以想最小化更改并優(yōu)化。

主要目標:

有沒有好的方法,能拿到request對象的序列化,或者轉化成字符串后,又能返回到原對象的方法???

嘗試方法:

demo:

Route::any('/test', function () {
    $originReq = clone request();
    echo serialize($originReq);
    // 這里拿到序列化后的request, 扔進隊列。
    return '';
})->setParams(['test' => 1]);
[x] 1. json化, 雖然不報錯了 ,但是跟實現(xiàn)目標,json數(shù)據(jù)沒任何關系了
[x] 2. 重新創(chuàng)建一個對象, 把路由參數(shù)和請求參數(shù)放進去, 再序列化.
    $originReq = request();

    $newReq = new \support\Request($originReq->rawBuffer());
    $newReq->route = $originReq->route;
    echo serialize($newReq);

報錯:

Exception: Serialization of 'Closure' is not allowed
[ ] 3.todo 今日繼續(xù) , 主方向,感覺 2.的方案有搞頭,再研究研究。。。
641 1 0
1個回答

tanhongbin

把這個對象 json成字符串 呢 試試 報錯不

  • yskj 2024-07-30

    json是可以的。 但json后,就沒有route關系了, 路由參數(shù)拿不到了

  • yskj 2024-07-30

    '''
    "connection":{"id":1,"status":2,"transport":"tcp","getRemoteIp":"127.0.0.1","remotePort":51816,"getRemoteAddress":"127.0.0.1:51816","getLocalIp":"127.0.0.1","getLocalPort":8787,"getLocalAddress":"127.0.0.1:8787","isIpV4":true,"isIpV6":false},"session":null,"properties":[],"plugin":"","app":"","controller":"app\controller\TestController","action":"query","route":{}}
    '''
    Route的setParams參數(shù)

  • yskj 2024-07-30

    json還是不適合

  • tanhongbin 2024-07-30

    這種本身好像就不能實現(xiàn),你請求的對象 放在隊列里面 消費者 拿到請求對象 沒辦法用 隊列消費者 是沒有這個方法的

  • yskj 2024-07-30

    就是想給Request做個快照, 類似clone的功能, 然后在隊列中喚醒,再調用對象的方法

  • tanhongbin 2024-07-30

    咋說呢 對象的屬性能這么干 但是對象的方法 你咋這么干? 這不現(xiàn)實呀,還不如直接把需要的整隊列里面,然后在隊列處理唄

  • yskj 2024-07-30

    “因為有同步處理時留下的代碼,直接依賴了Request,所以想最小化更改”。 架不住本來的同步代碼已經(jīng)實現(xiàn)了很多, 我只是優(yōu)化一下速度用異步,再加上幾個功能點。

  • tanhongbin 2024-07-30

    這 應該是 實現(xiàn)不了吧,這要是實現(xiàn)了 接口不能就徹底異步化了嘛

  • yskj 2024-07-30

    這也就請求中間件干的事,也不至于同步的業(yè)務邏輯異步化。

??