0

我正在通过 http 使用 PHP 设置 Google Cloud Tasks,但不明白我是否需要关闭连接?

我在找两个地方:

1)文档

$client = new CloudTasksClient();
$queueName = $client->queueName($projectId, $locationId, $queueId);

$httpRequest = new HttpRequest();
$httpRequest->setUrl($url);
$httpRequest->setHttpMethod(HttpMethod::POST);
$task = new Task();
$task->setHttpRequest($httpRequest);
$response = $client->createTask($queueName, $task);

2) Gcloud 客户端库

$cloudTasksClient = new CloudTasksClient();
try {
    $formattedParent = $cloudTasksClient->queueName('[PROJECT]', '[LOCATION]', '[QUEUE]');
    $task = new Task();
    $response = $cloudTasksClient->createTask($formattedParent, $task);
} finally {
    $cloudTasksClient->close();
}

我的版本:

$client = new CloudTasksClient();
try{
    $queueName = $client->queueName($projectId, $locationId, $queueId);
    $httpRequest = new HttpRequest();
    $httpRequest->setUrl($url);
    $httpRequest->setHttpMethod(HttpMethod::POST);
    $task = new Task();
    $task->setHttpRequest($httpRequest);
    $response = $client->createTask($queueName, $task);
}
catch(Exception $e){
    $this->logError("Error");
}
finally {
    $client->close();  <-- ???????? ( Do I need this )
}

我正在使用 App Engine,如果它有什么不同的话。

4

1 回答 1

2

通常 close() 语句是为了优雅地包装连接资源,例如刷新挂起的数据和释放内存。

在审查代码时,close()似乎执行以下操作:

  • 优雅地清理正在进行的 RPC 调用
  • 释放一些内存资源
  • 目前似乎对 REST 调用没有影响
  • 为未来的特定于 Cloud Tasks 的拆解活动创造空间

作为最佳实践,应该这样做。但是,如果您的 PHP 脚本非常专注于 Cloud Tasks 交互,那么它的影响似乎有限。

遍历代码

查看Cloud Tasks 客户端代码,似乎 close 方法是在GapicClientTrait中定义的。

事实证明,此语句是传输的通道:

    /**
     * Initiates an orderly shutdown in which preexisting calls continue but new
     * calls are immediately cancelled.
     *
     * @experimental
     */
    public function close()
    {
        $this->transport->close();
    }

可用传输的代码具有 REST 和 gRPC 选项。

HttpUnaryTransportTrait的 REST 之后,这似乎是一个空操作:

    public function close()
    {
        // Nothing to do.
    }

在 gRPC 到 Grpc\BaseStub 之后,我们到达gRPC 客户端实现

于 2019-07-08T20:55:50.657 回答