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.
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.
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.
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; }
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.
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 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.
Since XML is used, I won’t describe it much. After all, json is mostly used.
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.
One module corresponds to one project, and resource-oriented data access is performed between projects through REST-based interface standards.
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!
More projects mean more interface call documents, and proper processing of documents can better improve team collaboration efficiency.
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!