


Detailed code explanation of PHP remote calling and RPC framework (picture)
Preface
A project, from the beginning to the version update, all the way to the final version maintenance. Functions are constantly increasing, and the corresponding amount of code is also increasing, which means that the project becomes more unmaintainable. At this time, we need to break up a project by splitting so that the development team can better carry out the project. maintain.
Divided into modules
This stage is generally the initial stage of the project. Due to insufficient manpower, a server-side interface project has only one development and maintenance. According to development habits, the project will be divided into several Modules are developed and deployed under a project.
The disadvantage of this is that the project will become unmaintainable as the version is updated.
Sub-project
As the functions of each module continue to improve, the code becomes more bloated. At this time, the project needs to be split, such as the picture above, into user system projects and payment system projects.
CURL
In the beginning, everyone will use CURL to access external resources.
For example, a certain SMS platform SDK, such as the SDK provided by major third parties, is so entangled that the source code is directly accessed using the CURL function.
The advantage is that there are no environmental requirements and it can be used directly.
The disadvantage lies in the resource occupation problem of concurrent access.
//新浪微博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; }
RPC
Remote Procedure Call Protocol
RPC (Remote Procedure Call Protocol)-Remote Procedure Call Protocol, it is a remote procedure call protocol from a remote computer through the network Programmatically request services without understanding the protocols of the underlying network technology. The RPC protocol assumes the existence of some transport protocol, such as TCP or UDP, to carry information data between communicating programs. In the OSI network communication model, RPC spans the transport layer and application layer. RPC makes it easier to develop applications including network-distributed multi-programs.
RPC adopts client/server mode. The requester is a client, and the service provider is a server. First, the client calling process sends a calling message with process parameters to the service process, and then waits for the response message. On the server side, the process remains asleep until the calling information arrives. When a call message arrives, the server obtains the process parameters, calculates the result, sends a reply message, and then waits for the next call message. Finally, the client calls the process to receive the reply message, obtains the process result, and then the call execution continues.
Yar
The RPC framework produced by Bird Brother is a lightweight 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();?>
Calling code
<?php$client = new Yar_Client("http://host/api/");$result = $client->api("parameter); ?>
It should be noted that Brother Bird’s products have less documentation and require more debugging.
Thrift
Thrift is a software framework used for the development of scalable and cross-language services. It combines a powerful software stack and code generation engine to build among the programming languages of C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml Seamlessly integrated and efficient service.
The significance of remote calling is that different sub-projects can use languages that are more suitable for them to solve and achieve their needs more efficiently.
At the same time, for team development, it can improve the overall technical level.
SOAP
Since XML is used, I won’t describe it much. After all, json is mostly used.
JSON-RPC
The following is the standard for return values
--> [ {"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"} ]
In fact, you will find that we are providing the return value of the interface to the client, which is done in accordance with this standard of.
Correspondingly, the server must also follow this standard when receiving and returning data from the server.
Changes brought about by project split
Project refinement
One module corresponds to one project, and resource-oriented data access is performed between projects through REST-based interface standards.
Staff requirements
The premise of project split is that one project is not enough to meet the existing business development requirements, which means the number of developers will increase after the split.
The leap from guerrillas to regular army formation!
Documentation
More projects mean more interface call documents, and proper processing of documents can better improve team collaboration efficiency.
Postscript
The remote calling of services lies in how to reasonably rescue a project that is becoming unmaintainable from the tar pit and increase the overall business volume that the project can carry. However, the world There is no silver bullet.
The above is the detailed content of Detailed code explanation of PHP remote calling and RPC framework (picture). For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.
