Maison > développement back-end > Problème PHP > Comment lire et écrire protobuf3 en PHP

Comment lire et écrire protobuf3 en PHP

醉折花枝作酒筹
Libérer: 2023-03-11 18:40:02
avant
2670 Les gens l'ont consulté

protobuf (Google Protocol Buffers) est une bibliothèque d'outils de format d'échange de données de protocole efficace fournie par Google (similaire à Json), mais par rapport à Json, Protobuf a une efficacité de conversion plus élevée, l'efficacité temporelle et l'efficacité spatiale sont toutes deux 3 à 5 fois JSON.

Comment lire et écrire protobuf3 en PHP

Dans proto3, vous pouvez directement utiliser la commande protoc pour générer du code PHP. Le code PHP généré ne peut pas être utilisé directement et nécessite le support de la bibliothèque PHP Protobuf.

Ce qui suit utilise un exemple pour montrer comment utiliser protobuf en PHP. Définissez d'abord le fichier proto :

syntax = "proto3";
package lm;

message helloworld
{
    int32 id = 1; // ID
    string str = 2; // str
    int32 opt = 3; // optional field
}
Copier après la connexion

Notez que la syntaxe de proto3 est utilisée ici, qui est différente de celle de proto2. Les restrictions obligatoires et facultatives ne sont plus disponibles et tous les champs sont facultatifs. Quelle est la différence entre proto3 et proto2 ? Vous pouvez vous référer à cet article.

Ensuite, utilisez protoc pour générer le fichier PHP :

protoc --php_out=./ hello.proto
Copier après la connexion

Vous verrez qu'un fichier hello.pb.php est généré :

Générer le code PHP

namespace Lm;

use Google\Protobuf\Internal\DescriptorPool;
use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\RepeatedField;
use Google\Protobuf\Internal\GPBUtil;

class helloworld extends \Google\Protobuf\Internal\Message
{
    ....
}
Copier après la connexion

Lisez le code à l'intérieur et constatez qu'il utilise la classe sous GoogleProtobuf, c'est une bibliothèque PHP, vous pouvez la télécharger :

https://github.com/google/protobuf/tree/master/php/src/Google/Protobuf

Vous pouvez également utiliser composer pour l'introduire dans le projet. Il est recommandé d'utiliser composer car Composer générera automatiquement un autoloader pour vous :

composer require google/protobuf
Copier après la connexion

Après avoir introduit google/protobuf à l'aide de composer, un répertoire de fournisseurs apparaîtra dans le projet. Dans votre propre code, vous pouvez lire et écrire du binaire en incluant autoload.php sous includevendor et le fichier helloworld.pb.php qui vient d'être généré.

Exemple simple de lecture et d'écriture

Avec l'aide de la bibliothèque google/protobuf, il est très pratique pour PHP de lire et d'écrire des binaires au format protobuf.

Utilisez protobuf pour écrire des données dans un fichier binaire :

<?php
include &#39;vendor/autoload.php&#39;;
include &#39;hello.pb.php&#39;;

$from = new \Lm\helloworld();
$from->setId(1);
$from->setStr(&#39;foo bar, this is a message&#39;);
$from->setOpt(29);

$data = $from->serializeToString();
file_put_contents(&#39;data.bin&#39;, $data);
Copier après la connexion

Lisez le même fichier binaire :

<?php
include &#39;vendor/autoload.php&#39;;
include &#39;hello.pb.php&#39;;

$data = file_get_contents(&#39;data.bin&#39;);
$to = new \Lm\helloworld();
$to->mergeFromString($data);

echo $to->getId() . PHP_EOL;
echo $to->getStr() . PHP_EOL;
echo $to->getOpt() . PHP_EOL;
Copier après la connexion

Apprentissage recommandé : Tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal