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 'vendor/autoload.php'; include 'GPBMetadata/Person.php'; include 'Test/Person.php'; $person = new Test\Person(); $person->setName("lailaiji"); $person->setAge("28"); $person->setSex(true); $data = $person->serializeToString(); file_put_contents('data.bin',$data);
2. Deserialisierung
<?php include 'vendor/autoload.php'; include 'GPBMetadata/Person.php'; include 'Test/Person.php'; $bindata = file_get_contents('./data.bin'); $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!