ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用GuzzleHttp REST API客户端的PHP中的非阻塞调用

2019-10-28 13:28:42  阅读:505  来源: 互联网

标签:guzzle rest api php


我想使用PHP库GuzzleHttp进行非阻塞的REST API调用.

>我有一个REST API服务器(http://api.example.com/v1/wait)
> wait方法不执行任何操作,除了sleep(10)除外.
>我正在使用将来的参数从PHP CLI运行以下命令:

$client = new \GuzzleHttp\Client;
$response = $client->get('http://api.example.com/v1/wait', [
    'future' => true,
    'body' => [
        'some' => 'var'
    ],
]);
echo 'OK';

我希望“ OK”将立即回显,而无需等待REST API调用完成.而是将执行暂停10秒钟-这是REST wait()方法中的sleep()持续时间.

根据Guzzle文档:

You can send asynchronous requests by setting the future request option to true

我对调用完成回调并不感兴趣,我想要做的只是给API一些(可能很慢)的工作来继续生活.

我还尝试了cURL自己的multirequest和其他几个库-结果是相同的.执行被阻止,等待响应从API服务器到达.

那么,可能是什么问题呢?

谢谢!

解决方法:

即使使用cURL本机“多线程”,最长的执行时间也将是最长的查询完成所需的时间,因此PHP仍将等待最新的查询.这里的非阻塞术语是当前脚本的术语(例如,一次有5个非阻塞请求,但是它们都将以该脚本的形式完成).换句话说,除非所有请求都报告至少smth,否则脚本不会离开它们.

可能的解决方法是pcntl_fork初始化一些单独的线程来完成您的任务,而无需等待它完成.由于存在无法控制的分叉,因此存在所谓的僵尸进程,但是您可以尝试一下,因为它是bec.它不是永远运行的进程(又称工作进程).

这是关于pcntl_fork方法的one of the many文章.

标签:guzzle,rest,api,php
来源: https://codeday.me/bug/20191028/1952787.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有