Ein Projekt, von den Anfängen über das Versionsupdate bis hin zur endgültigen Versionspflege. Die Funktionen nehmen ständig zu und auch die entsprechende Menge an Code nimmt zu, was bedeutet, dass das Projekt immer weniger wartbar ist. Zu diesem Zeitpunkt müssen wir ein Projekt aufteilen, damit das Entwicklungsteam das Projekt besser verwalten kann .
Diese Phase ist im Allgemeinen die Anfangsphase des Projekts. Aufgrund unzureichender Arbeitskräfte kann ein serverseitiges Schnittstellenprojekt je nach Entwicklung nur entwickelt und gewartet werden Gewohnheiten, das Projekt wird in mehrere Module unterteilt, die im Rahmen eines Projekts entwickelt und bereitgestellt werden.
Der Nachteil hierbei ist, dass das Projekt mit der Aktualisierung der Version nicht mehr wartbar ist.
Da sich die Funktionen jedes Moduls weiter verbessern, wird der Code immer aufgeblähter. Zu diesem Zeitpunkt muss das Projekt, wie im Bild oben, in Benutzersystemprojekte und Zahlungssystemprojekte aufgeteilt werden.
Am Anfang wird jeder CURL verwenden, um auf externe Ressourcen zuzugreifen.
Zum Beispiel ist ein bestimmtes SMS-Plattform-SDK, beispielsweise das von großen Drittanbietern bereitgestellte SDK, so verwickelt, dass über die CURL-Funktion direkt auf den Quellcode zugegriffen werden kann.
Der Vorteil besteht darin, dass keine Umweltauflagen bestehen und es direkt verwendet werden kann.
Der Nachteil liegt im Ressourcenbelegungsproblem des gleichzeitigen Zugriffs.
//新浪微博SDK的http请求部分源码 /** * Make an HTTP request * * @return string API results * @ignore */ function http($url, $method, $postfields = NULL, $headers = array()) { $this->http_info = array(); $ci = curl_init(); /* Curl settings */ curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ci, CURLOPT_ENCODING, ""); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); if (version_compare(phpversion(), '5.4.0', '<')) { curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 1); } else { curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, 2); } curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); curl_setopt($ci, CURLOPT_HEADER, FALSE); switch ($method) { case 'POST': curl_setopt($ci, CURLOPT_POST, TRUE); if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); $this->postdata = $postfields; } break; case 'DELETE': curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); if (!empty($postfields)) { $url = "{$url}?{$postfields}"; } } if ( isset($this->access_token) && $this->access_token ) $headers[] = "Authorization: OAuth2 ".$this->access_token; if ( !empty($this->remote_ip) ) { if ( defined('SAE_ACCESSKEY') ) { $headers[] = "SaeRemoteIP: " . $this->remote_ip; } else { $headers[] = "API-RemoteIP: " . $this->remote_ip; } } else { if ( !defined('SAE_ACCESSKEY') ) {// $headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR']; } } curl_setopt($ci, CURLOPT_URL, $url ); curl_setopt($ci, CURLOPT_HTTPHEADER, $headers ); curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE ); $response = curl_exec($ci); $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); $this->url = $url; if ($this->debug) { echo "=====post data======\r\n"; var_dump($postfields); echo "=====headers======\r\n"; print_r($headers); echo '=====request info====='."\r\n"; print_r( curl_getinfo($ci) ); echo '=====response====='."\r\n"; print_r( $response ); } curl_close ($ci); return $response; }
Remote Procedure Call Protocol
RPC (Remote Procedure Call Protocol) – Remote Procedure Call Protocol, ein Remote Procedure Call Protocol von Protokolle, die Dienste von einem Remote-Computerprogramm anfordern, ohne die zugrunde liegende Netzwerktechnologie zu kennen. Das RPC-Protokoll setzt die Existenz eines Transportprotokolls wie TCP oder UDP voraus, um Informationsdaten zwischen kommunizierenden Programmen zu übertragen. Im OSI-Netzwerkkommunikationsmodell umfasst RPC die Transportschicht und die Anwendungsschicht. RPC erleichtert die Entwicklung von Anwendungen, einschließlich netzwerkverteilter Multiprogramme.
RPC übernimmt den Client/Server-Modus. Der Anforderer ist ein Client und der Dienstanbieter ist ein Server. Zuerst sendet der Client-Aufrufprozess eine Aufrufnachricht mit Prozessparametern an den Dienstprozess und wartet dann auf die Antwortnachricht. Auf der Serverseite bleibt der Prozess im Ruhezustand, bis die Anrufinformationen eintreffen. Wenn eine Anrufnachricht eintrifft, ruft der Server die Prozessparameter ab, berechnet das Ergebnis, sendet eine Antwortnachricht und wartet dann auf die nächste Anrufnachricht. Schließlich ruft der Client den Prozess auf, um die Antwortnachricht zu empfangen, und ruft das Prozessergebnis ab dann wird die Aufrufausführung fortgesetzt.
Das von Bird Brother produzierte RPC-Framework ist ein leichtes Framework.
<?phpclass API { /** * the doc info will be generated automatically into service info page. * @params * @return */ public function api($parameter, $option = "foo") { } protected function client_can_not_see() { } }$service = new Yar_Server(new API());$service->handle();?>
Aufrufcode
<?php$client = new Yar_Client("http://host/api/");$result = $client->api("parameter); ?>
Es sollte beachtet werden, dass Niao Ges Sachen weniger Dokumentation haben und mehr Debugging erfordern.
Thrift ist ein Software-Framework, das für die Entwicklung skalierbarer und sprachübergreifender Dienste verwendet wird. Es kombiniert einen leistungsstarken Software-Stack und eine Code-Generierungs-Engine zum Erstellen zwischen den Programmiersprachen C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk und OCaml Nahtlos integrierter und effizienter Service.
Die Bedeutung von Fernanrufen besteht darin, dass verschiedene Teilprojekte Sprachen verwenden können, die für sie besser geeignet sind, um ihre Bedürfnisse effizienter zu lösen.
Gleichzeitig kann es für die Teamentwicklung das allgemeine technische Niveau verbessern.
Da XML verwendet wird, werde ich es nicht viel beschreiben. Schließlich wird hauptsächlich JSON verwendet.
Das Folgende ist der Standard für Rückgabewerte
--> [ {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"}, {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}, {"jsonrpc": "2.0", "method": "subtract", "params": [42,23], "id": "2"}, {"foo": "boo"}, {"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"}, {"jsonrpc": "2.0", "method": "get_data", "id": "9"} ] <-- [ {"jsonrpc": "2.0", "result": 7, "id": "1"}, {"jsonrpc": "2.0", "result": 19, "id": "2"}, {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}, {"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "5"}, {"jsonrpc": "2.0", "result": ["hello", 5], "id": "9"} ]
Tatsächlich werden Sie feststellen, dass wir den Rückgabewert der Schnittstelle für bereitstellen Client, der auf diesem Standard basiert.
Entsprechend muss auch der Server diesem Standard folgen, wenn er Daten vom Server empfängt und zurücksendet.
Ein Modul entspricht einem Projekt, und der ressourcenorientierte Datenzugriff erfolgt zwischen Projekten über REST-basierte Schnittstellenstandards.
Die Prämisse der Projektaufteilung ist, dass ein Projekt nicht ausreicht, um die bestehenden Geschäftsentwicklungsanforderungen zu erfüllen, was bedeutet, dass die Anzahl der Entwickler nach der Aufteilung zunimmt.
Der Sprung von der Guerilla zur regulären Armee!
Mehr Projekte bedeuten mehr Schnittstellenaufrufe und Dokumente. Die ordnungsgemäße Verarbeitung von Dokumenten kann die Effizienz der Teamzusammenarbeit verbessern.
Beim Fernaufruf von Diensten geht es darum, wie man ein Projekt, das nicht mehr wartbar wird, aus der Teergrube retten und das Gesamtgeschäftsvolumen erhöhen kann, das das Projekt jedoch tragen kann ist kein Allheilmittel.
Das obige ist der detaillierte Inhalt vonDetaillierte Code-Erklärung des PHP-Remote-Aufrufs und des RPC-Frameworks (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!