gRPC для PHP: библиотеки, установка и примеры реализации

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

gRPC для PHP: библиотеки и примеры реализации

gRPC (gRPC Remote Procedure Calls) — это высокопроизводительный фреймворк для удалённого вызова процедур, разработанный Google. Он использует Protocol Buffers (protobuf) в качестве языка описания интерфейсов и сериализации данных. В отличие от REST, gRPC работает поверх HTTP/2, поддерживает двустороннюю потоковую передачу и обеспечивает строгую типизацию. В этой статье мы разберём, как подключить gRPC в PHP, какие библиотеки использовать, и напишем полноценный пример клиент-серверного взаимодействия.

Обзор библиотек для gRPC в PHP

Для работы с gRPC в PHP доступны два основных подхода:

  • Расширение grpc.so — официальное C-расширение от gRPC. Обеспечивает максимальную производительность, но требует компиляции и настройки на сервере.
  • Чистый PHP-клиент (например, grpc/grpc через Composer) — реализация на PHP, работающая через cURL и HTTP/2. Медленнее, но проще в развёртывании.

Для продакшена рекомендуется использовать расширение grpc, а для разработки или тестов — чистый PHP-клиент.

Установка необходимых компонентов

1. Установка protoc и плагина для PHP

Скачайте компилятор protobuf с официального репозитория под вашу ОС. Для генерации PHP-кода потребуется плагин protoc-gen-php-grpc:

# Установка protoc (Linux)
wget https://github.com/protocolbuffers/protobuf/releases/download/v25.0/protoc-25.0-linux-x86_64.zip
unzip protoc-25.0-linux-x86_64.zip -d /usr/local/protoc
export PATH=$PATH:/usr/local/protoc/bin

# Установка плагина для gRPC PHP
sudo apt-get install php-dev php-cli php-pear
sudo pecl install grpc
sudo pecl install protobuf

2. Установка Composer-зависимостей

Создайте проект и добавьте необходимые пакеты:

composer init
composer require grpc/grpc
composer require google/protobuf

Создание .proto файла

Определим простой сервис для работы с пользователями. Создайте файл user.proto:

syntax = "proto3";

package user;

service UserService {
    rpc GetUser (UserRequest) returns (UserResponse);
    rpc ListUsers (Empty) returns (stream UserResponse);
}

message UserRequest {
    int32 id = 1;
}

message UserResponse {
    int32 id = 1;
    string name = 2;
    string email = 3;
}

message Empty {}

Генерация PHP-кода из .proto

Выполните команду для компиляции .proto в PHP-классы:

protoc --php_out=./generated --grpc_out=./generated \
       --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin \
       user.proto

В папке generated появятся файлы:

  • GPBMetadata/User.php — метаданные прото-файла
  • User/UserRequest.php — класс запроса
  • User/UserResponse.php — класс ответа
  • User/UserServiceClient.php — клиент для вызова сервиса

Реализация gRPC сервера на PHP

Для серверной части используем официальное расширение grpc. Создайте файл server.php:

<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/generated/User/UserServiceInterface.php';
require_once __DIR__ . '/generated/User/UserServiceServer.php';

use Grpc\Server;
use User\UserRequest;
use User\UserResponse;
use User\UserServiceServer;

class MyUserService extends UserServiceServer
{
    public function GetUser(\User\UserRequest $request): \User\UserResponse
    {
        $response = new UserResponse();
        $response->setId($request->getId());
        $response->setName('John Doe');
        $response->setEmail('john@example.com');
        return $response;
    }

    public function ListUsers(\User\Empty $request, $context): void
    {
        $users = [
            ['id' => 1, 'name' => 'Alice', 'email' => 'alice@example.com'],
            ['id' => 2, 'name' => 'Bob', 'email' => 'bob@example.com'],
        ];

        foreach ($users as $data) {
            $response = new UserResponse();
            $response->setId($data['                    

Рекомендаций