目前我正在用 PHP 制作軟件,它使用 Guzzle 到托管它的同一 IP 來發(fā)送 Web 請求。目前,我正在提出一個看起來像這樣的請求:http://localhost:8000/temp/utils/transactions/callback?address=long_btc_address&balance=0&completed=0`應(yīng)返回的代碼應(yīng)如下所示$router->get('/temp/utils/transactions/callback', function (Illuminate\Http\Request $request){ \Illuminate\Support\Facades\Log::info($request, 'Callback'); return 'yo';});目前,該網(wǎng)站使用以下方式運行:php -S localhost:8000 -t public此外,發(fā)送此請求的代碼如下所示:$client = new Client();$addy = decrypt($address->address);$callback = $transaction->callback . "?address={$addy}&balance={$address->current_balance}&completed=0";$res = $client->request('GET', $callback);if ($res->getStatusCode() === 200) { return json_decode($res->getBody()->getContents());}總之,如果沒有真實世界的測試,我不太確定如何解決這個問題,但我想在本地進行測試,看看我收到了什么。
1 回答

慕雪6442864
TA貢獻1812條經(jīng)驗 獲得超5個贊
考慮php -S
?作為單線程服務(wù)器。
從文檔中:
Web 服務(wù)器只運行一個單線程進程,因此如果請求被阻止,PHP 應(yīng)用程序?qū)⑼V埂?/p>
因此,當(dāng)Guzzle
向同一臺服務(wù)器發(fā)送請求時,它會導(dǎo)致所謂的死鎖。原始請求和新請求都在等待對方。
因此,您不應(yīng)該讓腳本自行調(diào)用。您應(yīng)該使用支持多線程的真實服務(wù)器,例如 Apache 或 Nginx。
或者我更喜歡的選項:你可以讓 Laravel 調(diào)用它自己。就像是:
$req = Request::create($transaction->callback, 'GET',
? ? [
? ? ? ? 'address' => $addy,
? ? ? ? 'balance' => $address->current_balance,
? ? ? ? 'completed' => 0,
? ? ]
);
$res = app()->handle($req);?
// deal with the response here...
- 1 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消