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

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

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

Начать курс

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

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

Зачем нужен gRPC в PHP?

Традиционные REST API часто работают через JSON и HTTP/1.1, что приводит к избыточности данных и медленной сериализации. gRPC решает эти проблемы:

  • Бинарный протокол — protobuf занимает меньше места, чем JSON, и обрабатывается быстрее.
  • HTTP/2 — мультиплексирование, сжатие заголовков, потоковая передача.
  • Строгая типизация — контракты описываются в .proto файлах, что упрощает разработку и отладку.
  • Двусторонняя потоковая передача — сервер и клиент могут обмениваться данными асинхронно.

Основные библиотеки для gRPC в PHP

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

  • grpc.so — расширение PHP (C-расширение), реализующее HTTP/2 и gRPC-протокол.
  • protobuf.so — расширение для сериализации protobuf (альтернатива — чистый PHP-пакет google/protobuf).
  • Композер-пакеты: grpc/grpc и google/protobuf.

Рекомендуемый способ установки — через PECL (расширения) и Composer (зависимости).

Установка gRPC и protobuf

Для серверов на Linux (Ubuntu/Debian):

# Устанавливаем расширения через PECL
sudo pecl install grpc
sudo pecl install protobuf

# Добавляем в php.ini
echo "extension=grpc.so" >> /etc/php/8.2/cli/php.ini
echo "extension=protobuf.so" >> /etc/php/8.2/cli/php.ini

Для Windows скачайте DLL-файлы с PECL и укажите их в php.ini.

Далее устанавливаем библиотеки через Composer:

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 (UserList);
}

message UserRequest {
    int32 id = 1;
}

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

message Empty {}

message UserList {
    repeated UserResponse users = 1;
}

Генерация PHP-классов из .proto

Установите protoc и плагин для PHP:

# Скачайте protoc с https://github.com/protocolbuffers/protobuf/releases
# Затем сгенерируйте код:
protoc --php_out=./generated --grpc_out=./generated --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto

В папке generated появятся классы: UserRequest, UserResponse, UserServiceClient и др.

Пример сервера gRPC на PHP

Создадим сервер, который будет отвечать на запросы. Файл server.php:

require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/generated/UserServiceServer.php';

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

class MyUserService extends UserServiceServer
{
    public function GetUser(\Grpc\ServerCallReader $request, \Grpc\ServerCallWriter $response, \Grpc\ServerContext $context): void
    {
        $req = $request->read();
        $id = $req->getId();

        $user = new UserResponse();
        $user->setId($id);
        $user->setName("User #$id");
        $user->setEmail("user$id@example.com");

        $response->finish($user);
    }

    public function ListUsers(\Grpc\ServerCallReader $request, \Grpc\Server                    

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