Was ist ein RPC-Framework? Wenn RPC in einem Satz zusammengefasst werden kann: Remote Procedure Call, was ist dann ein Remote Call? Normalerweise rufen wir eine Methode in PHP auf, beispielsweise diese Funktionsmethode: localAdd(10, 20). Die spezifische Implementierung der localAdd-Methode wird entweder vom Benutzer definiert oder kommt mit der PHP-Bibliotheksfunktion, also in der localAdd-Methode Code wird lokal implementiert, es handelt sich um einen lokalen Aufruf! Remote-Aufruf bedeutet: Die spezifische Implementierung der aufgerufenen Methode befindet sich nicht dort, wo das Programm ausgeführt wird, sondern an einem anderen entfernten Ort.
Zum Beispiel ruft A (Client) die von B (Server) bereitgestellte remoteAdd-Methode auf:
Erstellen Sie zunächst a Verbindung zwischen A und B TCP-Verbindung;
Dann serialisiert A den aufzurufenden Methodennamen (remoteAdd hier) und die Methodenparameter (10, 20) in einen Byte-Stream und sendet ihn aus;
B akzeptiert den von A gesendeten Bytestrom, deserialisiert ihn dann, um den Zielmethodennamen und die Methodenparameter zu erhalten, führt dann den entsprechenden Methodenaufruf (möglicherweise localAdd) aus und gibt das Ergebnis 30 zurück;
A akzeptiert das Ergebnis des Fernanrufs und gibt 30 aus.
Das RPC-Framework kapselt die Details, die ich gerade erwähnt habe, und bietet Benutzern eine einfache und benutzerfreundliche API-Nutzung.
Entkopplung: Wenn der Server die Methode ändern muss, weiß der Client davon nichts und muss keine Änderungen vornehmen. Diese Methode eignet sich für abteilungsübergreifende und Häufig kommt eine unternehmensübergreifende Zusammenarbeit zum Einsatz, der Anbieter der Methode wird meist als Service Exposure bezeichnet.
Durch die obige einfache Erklärung scheint es, dass RPC und Socket ähnlich sind. Sie alle rufen Remote-Methoden auf und befinden sich alle im Client/Server-Modus. Ich habe zuvor auch einen Artikel geschrieben: Was sind die Unterschiede zwischen ihnen?
RPC (Remote Procedure Call) verwendet Client Im /server-Modus können zwei Prozesse miteinander kommunizieren. Socket ist eine der von RPC häufig verwendeten Kommunikationsmethoden. RPC basiert auf Socket und erfordert mehr Netzwerk- und Systemressourcen als Socket. Neben Socket verfügt RPC auch über andere Kommunikationsmethoden wie http, die eigene Pipeline des Betriebssystems und andere Technologien zur Implementierung von Aufrufen an Remote-Programme. Im Windows-System von Microsoft verwendet RPC benannte Pipes für die Kommunikation.
Nachdem wir RPC verstanden haben, wissen wir, dass RPC sich im Client/Server-Modus befindet und Remote-Methoden aufruft. REST ist auch eine Reihe von API-Aufrufprotokollmethoden, mit denen wir vertraut sind. Es basiert auch auf dem Client/Server-Modus und ruft Remote-Methoden auf. Was ist also der Unterschied zwischen ihnen?
REST API und RPC kapseln beide Funktionen in Schnittstellen auf der Serverseite und machen sie für Aufrufe durch den Client verfügbar. Die REST API basiert jedoch auf dem HTTP-Protokoll und REST ist auf die Weitergabe von POST/GET verpflichtet /PUT/DELETE und andere Methoden sowie eine für Menschen lesbare URL, um eine http-Anfrage bereitzustellen. RPC muss nicht auf dem HTTP-Protokoll basieren
Wenn sich die beiden Back-End-Sprachen gegenseitig aufrufen, kann die Verwendung von RPC daher eine bessere Leistung erzielen (durch Eliminierung einer Reihe von Dingen wie HTTP-Headern), und das sollte auch der Fall sein einfacher zu konfigurieren sein. Wenn das Frontend das Backend über AJAX aufruft, ist es besser, die REST-API zu verwenden (da Sie die HTTP-Hürde ohnehin nicht umgehen können).
Da PHP die beste Sprache der Welt ist, was sind die beliebtesten RPC-Frameworks in PHP?
Lassen Sie uns sie zuerst auflisten: phprpc, yar, thrift, gRPC, swoole, hprose
Aufgrund der begrenzten Zeit und Energie ist es unmöglich, sie einzeln zu lernen und zu verwenden Einige davon werden weltweit am häufigsten verwendet. Da das RPC-Prinzip dasselbe ist, handelt es sich bei beiden um den Client/Server-Modus, aber die Art und Weise, wie jedes Framework verwendet wird, ist unterschiedlich.
Erkläre hauptsächlich PHPrPC und Yar, von denen ich bisher gehört habe und mit denen ich am häufigsten in Berührung gekommen bin.
Laden Sie zunächst die neueste stabile Version von phprpc von der offiziellen Website herunter: Download-Link Entpacken.
Wir werden feststellen, dass sich darin viele Dateien und Ordner mit der folgenden Struktur befinden:
dhparams/
pecl/
bigint.php
compat.php
phprpc_date.php
xxtea.php
dhparams.php
phprpc_server. php
phprpc_client.php
Darunter sind dhparams und pecl Ordner, und der in pecl ist die xxtea-Erweiterung von php, wie auf der offiziellen Website beschrieben, können Sie es installieren oder nicht, und es kann ohne die Installation von phprpc ausgeführt werden. Wenn Sie jedoch schnellere Verschlüsselungsverarbeitungsfunktionen benötigen, können Sie diese installieren.
Ich sollte es besser installieren. Schließlich ist eine schnellere Verschlüsselung eine gute Sache:
Die Installationsschritte sind wie folgt. Kopieren Sie zunächst den xxtea-Ordner unter pecl in das etx-Verzeichnis des PHP-Quellcodes: /lamp/php-5.4.11/ext . Verwenden Sie dann phpize, um mit Erweiterungen neu zu kompilieren.
[root@localhost /]# cd /lamp/php-5.4.11/ext/xxtea [root@localhost xxtea]# /usr/local/php/bin/phpize [root@localhost xxtea]# ./configure --enable-xxtea=shared --with-php-config=/usr/local/php/bin/php-config make && make install
OK, die Kompilierung ist abgeschlossen und zeigt uns an, dass xxtea.so bereits in /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xxtea.so ist.
Als nächstes müssen wir diese xxtea.so am Ende von php.ini hinzufügen:
[root@localhost /]# vi /usr/local/php/etc/php.ini [xxtea] extension=xxtea.so
Okay. Nachdem wir es hinzugefügt haben, müssen wir Apache oder php-fpm neu starten
重启apache [root@localhost /]# /usr/local/apache/bin/apachectl restart 平滑重启php-fpm kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
Öffnen Sie nach dem Neustart die phpinfo()-Seite und suchen Sie, Sie sollten xxtea sehen können.
Nehmen wir zunächst ein einfaches Beispiel. PHPRPC ist ebenfalls in Server und Client unterteilt. Die entsprechenden im Ordner sind also phprpc_server.php und phprpc_client.php
Schauen wir uns einige Beispiele auf der offiziellen Website an und üben:
server.php Serverseite: Das Schreiben auf diese Weise wird abgeschlossen eine endgültige einfache Helloword-Schnittstelle.
<?php include ("phprpc/phprpc_server.php"); function HelloWorld() { return 'Hello World!'; } $server = new PHPRPC_Server(); $server->add('HelloWorld'); $server->start();
Führen Sie server.php aus, ich habe es gelöscht und es wurde ein Fehler gemeldet! ! !
PHP Strict Standards: Non-static method PHPRPC_Server::initSession().... Cannot redeclare gzdecode().....
Ich habe es gegoogelt und dort stand, dass ich zuerst die initSession() in Zeile 413 von phprpc_server.php in eine statische Funktion geändert habe
static function initSession() { **** }
PS So großer Fehler, wie wird PHPRPC veröffentlicht! ! !
In der Funktion gzdecode() in Zeile 71 von compat.php hat PHP5.4 diese Funktion bereits implementiert. Auf diese Weise wird die Funktion neu geschrieben und ein Fehler gemeldet. Fügen Sie also ein Urteil hinzu:
if (!function_exists('gzdecode')) { //将gzdecode函数包括进来 }
Okay. Speichern Sie, nachdem Sie die Änderungen vorgenommen haben. Führen Sie server.php erneut aus. OK. Keine Fehler mehr. Ausgabe:
phprpc_functions="YToxOntpOjA7czo5OiJoZWxsb3dvcmQiO30=";
Schreiben wir als nächstes die client.php. Mal sehen, wie sie geschrieben ist.
<?php include ("phprpc/phprpc_client.php"); $client = new PHPRPC_Client('http://127.0.0.1/server.php'); echo $client->HelloWorld(); ?>
Wir führen die folgende client.php aus und die Ausgabe ist wie erwartet:
Hello Word!
So eine einfache Server-/Clent-Bereitstellung ist erfolgt. Obwohl es in der Mitte einige Fehler gab, ist es im Allgemeinen recht einfach und leicht zu verstehen.
Weitere Informationen zur fortgeschritteneren Verwendung finden Sie auf der offiziellen Website.
Yar ist das Meisterwerk von Hui Xinchen, dem berühmten PHP-Meister in China, und wurde in Weibo-Produkten verwendet. Es ist auch ein RPC-Framework. Da es eine in reinem C geschriebene PHP-Erweiterung verwendet, sollte die Effizienz recht hoch sein und es unterstützt asynchrone Parallelität, was recht gut ist.
Offizieller Website-Download: http://pecl.php.net/package/yar Die neueste Version yar-1.2.4.tgz
Dann entpacken und kopieren Sie den PHP-Quellcode in das etx-Verzeichnis: /lamp/php-5.4.11/ext. Verwenden Sie dann phpize, um mit Erweiterungen neu zu kompilieren.
[root@localhost yar-1.2.4]# /usr/local/php/bin/phpize [root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config
Aber es gibt ein Problem: prompt, es gibt ein Problem mit Curl:
configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
Ich schätze, es gibt ein Problem mit Curl auf meinem lokalen Computer, dann verwende yum dazu Installieren Sie es:
yum -y install curl-devel
Nach der Installation von Curl fahren Sie mit dem Kompilieren und Installieren fort, und es wird kein Problem auftreten:
[root@localhost yar-1.2.4]# /usr/local/php/bin/phpize [root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config [root@localhost yar-1.2.4]# make && make install
Nach dem Erfolg werden wir aufgefordert, das yar.so Erweiterung ist bereits in /usr/local/php/lib/php /extensions/no-debug-zts-20100525/ ist ausgefallen.
Wir bearbeiten php.ini, fügen am Ende die Erweiterung yar.so hinzu und starten dann Apache oder php-pfm neu.
[root@localhost /]# vi /usr/local/php/etc/php.ini [yar] extension=yar.so
Okay. Nachdem wir es hinzugefügt haben, müssen wir Apache oder php-fpm neu starten
重启apache [root@localhost /]# /usr/local/apache/bin/apachectl restart 平滑重启php-fpm kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
Nachdem der Neustart abgeschlossen ist, öffnen Sie die Seite phpinfo(), suchen Sie, und Sie sollten yar sehen können.
Yar ist wie andere RPC-Frameworks auch ein Server/Client-Modell, daher machen wir dasselbe und beginnen mit dem Schreiben eines einfachen Beispiels, um zu zeigen, wie man es aufruft.
yar_server.php stellt die Serverseite dar
<?php class API { public function api($parameter, $option = "foo") { return $parameter; } protected function client_can_not_see() { } } $service = new Yar_Server(new API()); $service->handle();
Okay, lassen Sie es uns im Browser ausführen und die unten gezeigte Ausgabe wird angezeigt. Sehr hochwertig! ! ! Bruder Niao sagte, dass der Zweck darin besteht, auf einen Blick zu wissen, wie viele Schnittstellen mein RPC bereitstellt, und dass die API-Dokumentation weggelassen werden kann.
Okay, fangen wir an, yar_client.php zu schreiben:
$client = new Yar_Client("http://127.0.0.1/yar_server.php"); echo $client->api('helo word');
Okay, das ist im Grunde das, was andere Swoole, HProse usw. tun Das Prinzip besteht nur darin, herauszufinden, welches mehr Funktionen hat und einfacher zu bedienen ist.
Verwandte Empfehlungen:
Das RPC-Framework in PHP implementiert ein Flusskontrollsystem basierend auf Redis
Detaillierte Beispiele des RPC-Frameworks
Detaillierte Code-Erklärung des PHP-Remote-Aufrufs und des RPC-Frameworks (Bild)
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des beliebten RPC-Frameworks in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!