Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung des ProtoBuf-Datenformats in einer PHP-Umgebung

Verwendung des ProtoBuf-Datenformats in einer PHP-Umgebung

Guanhui
Guanhuinach vorne
2020-06-19 18:14:554179Durchsuche

Verwendung des ProtoBuf-Datenformats in einer PHP-Umgebung

Vorwort

RPC ist ein Google Unternehmen Ein führendes RPC-Framework, das Protobuf als Datenübertragungsformat verwendet. Mit der Reife des gRPC-Frameworks und der Zunahme der Anzahl der Benutzer hat auch Protobuf, das zugrunde liegende Datenformat, immer mehr Aufmerksamkeit erhalten Für das PHP-Ökosystem , das zugehörige ProtoBuf Es gibt relativ wenige Einführungsdokumente und Nutzungsinformationen, daher hoffe ich, einen kurzen Artikel schreiben zu können, um einigen bedürftigen Studenten zu helfen.

ProtoBuf (Google Protocol Buffer) ist ein sequenzstrukturiertes Datenformat, das von Google für den Datenaustausch verwendet wird. Es verfügt über plattformübergreifende, sprachübergreifende und skalierbare Funktionen. Es ist vom gleichen Typ Verwendet XML und JSON, verfügt jedoch über ein geringeres Übertragungsvolumen und höhere Kodierungs- und Dekodierungsfunktionen. Es eignet sich besonders für Bereiche wie Datenspeicherung und Netzwerkdatenübertragung, die ein hohes Speichervolumen und Echtzeitleistung erfordern.

  Die neueste Version des offiziellen ProtoBuf, ProtoBuf3, unterstützt bereits mehrere Sprachen: C++C#GoJavaPythonRubyObject C JavascriptPHP und bietet Tools zum einfachen Generieren der von ProtoBuf benötigten Klassenbibliotheken für verschiedene Sprachen.

  Im Folgenden wird das Personendatenformat als Beispiel verwendet, um zu beschreiben, wie ProtoBuf3 in einer PHP-Umgebung verwendet wird.

1. Definieren Sie einen Nachrichtentyp

Erstellen Sie eine Definitionsdatei über Person (mit .proto als Suffix), wie im Beispiel ist person.proto, der Dateiinhalt lautet wie folgt:


syntax="proto3";
package test;
message Person{
 string name=1;//姓名
 int32 age=2;//年龄
 bool sex=3;//性别
}

1: gibt an, dass das Proto3-Format verwendet wird, wenn nicht angegeben wird proto2 sein

2. Paketname als test definieren. Beim Generieren einer Klasse wird ein Verzeichnis als test generiert

3. Nachrichtentextinhalt, der die Definition jedes Felds enthält

2. Generieren Sie die entsprechende PHP-Klasse

Nach der Definition des Formats Wenn das Format nicht das generiert, was wir benötigen, sind Klassenbibliotheken tatsächlich bedeutungslos. Google bietet auch ein Toolprotokoll zum Generieren der gewünschten Klassenbibliotheken.

1. Protokoll installieren

Installationsadresse: protobuf-php-3.5.1.tar.gz, die neueste ist 3.5.1

Offiziell Veröffentlichungsadresse: https://github.com/google/protobuf/releases/tag/v3.5.1

Entpacken und installieren:


tar -zxvf protobuf-php-3.5.1.tar.gz
cd protobuf-3.5.1
./configure --prefix=/opt/soft/protobuf
make
make install

2. Klassenbibliothek generieren

/opt/soft/protobuf/bin/protoc --php_out=./ person.proto

Nach der Generierung werden die folgenden Dateien generiert das aktuelle Verzeichnis:

GPBMetadata/Person.php

Test/Person.php

3. Verwendung von ProtoBuf in PHP

Die Verwendung von ProtoBuf in PHP basiert auf einer Protobuf-Erweiterung. Es gibt derzeit zwei Möglichkeiten, es zu verwenden: 1: die C-Erweiterung von PHP, 2: das Lib-Erweiterungspaket von PHP Es ist gerade im Download-Paket zu finden.

Darüber hinaus können Sie auch Composer verwenden, um die abhängige Erweiterung zu installieren: Composer erfordert Google/Protobuf

Hier verwende ich hauptsächlich Composer zur Installation, was mir helfen sollte Autoload generieren

Nach der Installation der Abhängigkeiten können wir mit der Verwendung von Protobuf in der PHP-Umgebung beginnen

1. Serialisierung


<?php
include &#39;vendor/autoload.php&#39;;
include &#39;GPBMetadata/Person.php&#39;;
include &#39;Test/Person.php&#39;;

$person = new Test\Person();
$person->setName("lailaiji");
$person->setAge("28");
$person->setSex(true);
$data = $person->serializeToString();
file_put_contents(&#39;data.bin&#39;,$data);


2. Deserialisierung


<?php
include &#39;vendor/autoload.php&#39;;
include &#39;GPBMetadata/Person.php&#39;;
include &#39;Test/Person.php&#39;;
$bindata = file_get_contents(&#39;./data.bin&#39;);
$person = new Test\Person();
$person->mergeFromString($bindata);
echo $person->getName();

kann Lailaiji normal ausgeben

Allgemeine Verwendung von PHP:

Serialisierung:

1. serializeToString: in eine Binärzeichenfolge serialisieren

2. serializeToJsonString: in eine JSON-Zeichenfolge serialisieren

Deserialisierung:

1. mergeFromString: Binäre String-Deserialisierung

2. mergeFromJsonString: Json-String-Deserialisierung

.Proto-Nachrichtenanalyse

1. Definition:

Variablenname = Position eingeben;

Zum Beispiel: int32 age=1;

Hier muss unterschieden werden. Die Zahl nach dem Variablennamen bedeutet die Position des Variableninhalts in der Binärsequenz und nicht den Wert der Variablen. Die Zahl darf nur nicht wiederverwendbar sein.

2. Derzeit unterstützte Typen:

double, float, int32, int64, uint32, uint64, sint32, sint64

fixed32 , Fixed64,sfixed32,sfixed64,bool,bytes

Empfohlenes Tutorial: „PHP


Das obige ist der detaillierte Inhalt vonVerwendung des ProtoBuf-Datenformats in einer PHP-Umgebung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen