精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文搞懂RPC,So Easy!

開發 前端
RPC主要依賴于客戶端與服務端建立socket鏈接;而HTTP REST實現通訊的代價比較高,這是RPC的一個優勢體現。

什么是RPC

RPC的中文是“遠程過程調用”,對應的英文全稱是:Remote Procedure Call,可以簡單理解為一個節點請求另一個節點提供的服務。

請先自行思考一下什么是“本地過程調用”,可以更好的理解“遠程過程調用”。

知識點:RPC主要依賴于客戶端與服務端建立socket鏈接;而HTTP REST實現通訊的代價比較高,這是RPC的一個優勢體現。(gRPC使用http2.0)

為什么用RPC

就是因為無法在同一個進程內,或者無法在同一個服務器上通過本地調用的方式實現我們的需求。

HTTP能滿足需求但是不夠高效,所以我們需要使用RPC。

知乎大神的回答[1]

RPC的優勢

  1. RPC能夠跨多種開發工具和平臺
  2. RPC能夠跨語言調用
  3. RPC能夠提高系統的可擴展性,解耦,提高復用
  4. RPC相較于HTTP 1.1,傳輸效率更高,性能消耗更小,自帶負載均衡策略,自動實現服務治理

RPC和HTTP對比

  • RPC主要用于公司內部的服務調用,性能消耗低,傳輸效率高,服務治理方便。
  • HTTP主要用于對外的異構環境,瀏覽器接口調用,APP接口調用,第三方接口調用等。
  • RPC和HTTP的詳細對別[2]可以看這篇文章,不作為本篇的重點

RPC的使用邊界

通過和HTTP的對比,我們可以倒推出RPC的邊界:對外的異構環境,瀏覽器接口調用,APP接口調用,第三方接口調用。

上述這些都不適合RPC,不知道RPC不適合做什么,比知道RPC能做什么更重要。

RPC入門1:net/rpc

基本構成

  1. RPC的基本構成:服務端,客戶端
  2. 服務端基本構成:結構體,請求結構體,響應結構體
  3. 客戶端基本構成:請求結構體,響應結構體

代碼示例

rpc_service.go

package main

import (
"errors"
"fmt"
"log"
"net"
"net/http"
"net/rpc"
"os"
)

type Arith struct {

}

//請求結構體
type ArithRequest struct {
A int
B int
}

//響應結構體
type ArithResponse struct {
Pro int //乘積
Quo int //
Rem int //余數
}

//乘積方法
func (this *Arith) Multiply(req ArithRequest,res *ArithResponse) error{
res.Pro = req.A * req.B
return nil
}

//除法運算方法
func (this *Arith) Divide(req ArithRequest,res *ArithResponse) error{
if req.B ==0 {
return errors.New("divide by zero")
}
res.Quo = req.A / req.B
res.Rem = req.A % req.B
return nil
}

func main() {
//注冊rpc服務
rpc.Register(new(Arith))
//采用http協議作為rpc載體
rpc.HandleHTTP()

lis,err := net.Listen("tcp","127.0.0.1:8095")
if err!=nil {
log.Fatalln("fatal error:",err)
}

fmt.Fprintf(os.Stdout,"%s","start connection\n")

//常規啟動http服務
http.Serve(lis,nil)
}

rpc_client.go

package main

import (
"fmt"
"log"
"net/rpc"
)

//算數運算請求結構體
type ArithRequest struct {
A int
B int
}

//響應結構體
type ArithResponse struct {
Pro int //
Quo int //
Rem int //余數
}

func main() {
conn,err := rpc.DialHTTP("tcp","127.0.0.1:8095")
if err!=nil {
log.Fatalln("dialing error:",err)
}

req := ArithRequest{10,20}
var res ArithResponse

err = conn.Call("Arith.Multiply",req,&res) //乘法運算
if err!=nil {
log.Fatalln("arith error:",err)
}
fmt.Printf("%d * %d = %d\n",req.A,req.B,res.Pro)

//除法運算
err = conn.Call("Arith.Divide",req,&res)
if err!=nil {
log.Fatalln("arith error:",err)
}
fmt.Printf("%d / %d = %d 余數是:%d",req.A,req.B,res.Quo,res.Rem)
}

運行結果

先啟動服務端,再啟動客戶端連接服務端

//服務端console
start connection

//客戶端console
10 * 20 = 200
10 / 20 = 0 余數是:10

RPC入門2:net/rpc/jsonrpc

實現跨語言調用

jsonrpc_server.go

package main

import (
"errors"
"fmt"
"log"
"net"
"net/rpc"
"net/rpc/jsonrpc"
"os"
)

type Arith struct {

}

//請求結構體
type ArithRequest struct {
A int
B int
}

//響應結構體
type ArithResponse struct {
Pro int //乘積
Quo int //
Rem int //余數
}

//乘積方法
func (this *Arith) Multiply(req ArithRequest,res *ArithResponse) error{
res.Pro = req.A * req.B
return nil
}

//除法運算方法
func (this *Arith) Divide(req ArithRequest,res *ArithResponse) error{
if req.B ==0 {
return errors.New("divide by zero")
}
res.Quo = req.A / req.B
res.Rem = req.A % req.B
return nil
}

func main() {
//注冊rpc服務
rpc.Register(new(Arith))
//采用http協議作為rpc載體
rpc.HandleHTTP()

lis,err := net.Listen("tcp","127.0.0.1:8096")
if err!=nil {
log.Fatalln("fatal error:",err)
}

fmt.Fprintf(os.Stdout,"%s","start connection\n")

//接收客戶端請求 并發處理 jsonrpc
for {
conn,err :=lis.Accept() //接收客戶端連接請求
if err!=nil {
continue
}

//并發處理客戶端請求
go func(conn net.Conn) {
fmt.Fprintf(os.Stdout,"%s","new client in coming\n")
jsonrpc.ServeConn(conn)
}(conn)
}

//常規啟動http服務
//http.Serve(lis,nil)
}

jsonrpc_client.go

package main

import (
"fmt"
"log"
"net/rpc/jsonrpc"
)

//算數運算請求結構體
type ArithRequest struct {
A int
B int
}

//響應結構體
type ArithResponse struct {
Pro int //
Quo int //
Rem int //余數
}

func main() {
// 只有這里不一樣
conn,err := jsonrpc.Dial("tcp","127.0.0.1:8096")
if err!=nil {
log.Fatalln("dialing error:",err)
}

req := ArithRequest{9,2}
var res ArithResponse

err = conn.Call("Arith.Multiply",req,&res) //乘法運算
if err!=nil {
log.Fatalln("arith error:",err)
}
fmt.Printf("%d * %d = %d\n",req.A,req.B,res.Pro)

//除法運算
err = conn.Call("Arith.Divide",req,&res)
if err!=nil {
log.Fatalln("arith error:",err)
}
fmt.Printf("%d / %d = %d 余數是:%d",req.A,req.B,res.Quo,res.Rem)
}

運行結果

先啟動服務端,再啟動客戶端連接服務端

//服務端console
start connection

//客戶端console
9 * 2 = 18
9 / 2 = 4 余數是:1

//服務端console
new client in coming

RPC入門3:go php跨語言調用

Go作為服務端,PHP作為客戶端

jsonrpc_server.go:和入門2服務端的代碼一樣

下面是PHP代碼

jsonrpc_client.php

<?php
class JsonRPC
{

private $conn;

function __construct($host, $port)
{
$this->conn = fsockopen($host, $port, $errno, $errstr, 3);
if (!$this->conn) {
return false;
}
}

public function Call($method, $params)
{
if (!$this->conn) {
return false;
}
$err = fwrite($this->conn, json_encode(array(
'method' => $method,
'params' => array($params),
'id' => 0,
)) . "\n");
if ($err === false) {
return false;
}
stream_set_timeout($this->conn, 0, 3000);
$line = fgets($this->conn);
if ($line === false) {
return NULL;
}
return json_decode($line, true);
}
}

$client = new JsonRPC("127.0.0.1", 8096);
$args = array('A' => 9, 'B' => 2);
$r = $client->Call("Arith.Multiply", $args);
printf("%d * %d = %d\n", $args['A'], $args['B'], $r['result']['Pro']);
$r = $client->Call("Arith.Divide", array('A' => 9, 'B' => 2));
printf("%d / %d, Quo is %d, Rem is %d\n", $args['A'], $args['B'], $r['result']['Quo'], $r['result']['Rem']);

如何在本地啟動PHP[3] 不作為本文重點,可以看這篇文章。

運行結果

本地啟動PHP服務:

??http://127.0.0.1/jsonrpc_client.php??

運行結果如下:

9 * 2 = 18 9 / 2, Quo is 4, Rem is 1

總結

一文入門RPC,就是如此絲滑,So Easy!

歡迎還在用單體架構,沒有使用RPC的同學們操練起來,尤其是PHP的小伙伴們,卷起來吧。該學學Go語言啦~

相關資料

[1]知乎大神的回答: https://www.zhihu.com/question/25536695

[2]RPC和HTTP的詳細對別: http://www.ccutu.com/244407.html

[3]如何在本地啟動PHP: ??https://blog.csdn.net/resilient/article/details/80770531??

本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。

轉載本文請聯系「 程序員升級打怪之旅」公眾號。

責任編輯:武曉燕 來源: 程序員升職加薪之旅
相關推薦

2022-02-14 21:17:21

RPC框架協議

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯網NoSQL

2021-03-22 10:05:59

netstat命令Linux

2023-09-15 12:00:01

API應用程序接口

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-08-24 16:50:45

2024-06-05 11:43:10

2019-11-19 08:00:00

神經網絡AI人工智能

2022-06-07 10:13:22

前端沙箱對象

2021-06-30 08:45:02

內存管理面試

2022-08-15 15:39:23

JavaScript面向對象數據

2021-01-13 05:21:59

參數

2020-03-18 14:00:47

MySQL分區數據庫

2023-10-16 08:16:31

Bean接口類型

2023-03-06 21:29:41

mmap技術操作系統

2023-05-22 13:27:17

2023-09-02 21:27:09

2021-07-08 10:08:03

DvaJS前端Dva

2021-03-04 00:09:31

MySQL體系架構
點贊
收藏

51CTO技術棧公眾號

老熟妻内射精品一区| 综合久久国产| 国产成人无码专区| 91麻豆国产自产在线观看亚洲| 欧美久久久久中文字幕| 欧美一级中文字幕| 黄色视屏网站在线免费观看| 六月婷婷色综合| 欧美激情精品久久久久久黑人| 青青草视频成人| 日韩色性视频| 欧美日韩一区二区免费在线观看| 亚洲a∨一区二区三区| 亚洲AV午夜精品| 久久中文字幕一区二区三区| 久久久精品免费| 三级电影在线看| 久久69av| 欧美视频中文一区二区三区在线观看| 屁屁影院ccyy国产第一页| 精品久久av| 国产成人精品免费视频网站| 国产精品都在这里| 国产午夜福利精品| 大片网站久久| 亚洲国产精品大全| 色噜噜狠狠一区二区三区狼国成人| cao在线视频| 亚洲三级小视频| 日韩精品伦理第一区| 国产小视频一区| 久久精品国产一区二区三| 热99在线视频| 日韩经典在线观看| 欧美在线二区| 中文字幕一区日韩电影| 玖玖爱在线观看| 91精品日本| 日韩欧美精品在线视频| 久久久久久久高清| 粉嫩av一区二区三区四区五区 | 精品国产第一区二区三区观看体验| 91网址在线播放| 中文字幕21页在线看| 午夜精品久久久久久久99水蜜桃 | 好吊日在线视频| 成人三级视频| 中文字幕久热精品视频在线| 国产一二三四区在线| 亚洲精品小区久久久久久| 欧美大黄免费观看| 高清中文字幕mv的电影| 亚洲视频精选| 精品国产免费久久| 麻豆短视频在线观看| 少妇精品在线| 亚洲аv电影天堂网| 怡红院一区二区| 粉嫩久久久久久久极品| 亚洲国产成人av在线| 视频免费在线观看| 琪琪久久久久日韩精品| 日韩精品久久久久久福利| 中文字幕 亚洲一区| 日韩av系列| 亚洲欧美中文字幕| 国产高清一区二区三区四区| 精品精品99| 色综久久综合桃花网| 天天色天天综合| 在线成人激情| 国内精品中文字幕| 欧美h在线观看| 日韩**一区毛片| 91亚洲一区精品| 亚洲精品久久久久久久久久久久久久| aaa国产一区| 欧美一区免费视频| 美女羞羞视频在线观看| 洋洋成人永久网站入口| 男人日女人逼逼| 五月激情久久| 666欧美在线视频| 天天躁日日躁狠狠躁av麻豆男男 | 亚洲一卡二卡区| 影音先锋中文在线视频| 天天av天天翘天天综合网| 91看片就是不一样| 国产精品成人**免费视频| 欧美精品一区男女天堂| 国产一区二区三区四区五区六区| 天天色综合色| 国色天香2019中文字幕在线观看| 亚洲视频 欧美视频| 蜜乳av一区二区| 国产不卡一区二区在线观看| 免费成人av电影| 亚洲女同女同女同女同女同69| 奇米精品一区二区三区| 91麻豆精品一二三区在线| 亚洲二区中文字幕| 中文字幕在线观看二区| 亚洲黄色免费| 国产男女猛烈无遮挡91| 国产成人三级在线观看视频| 国产精品私人影院| 成人黄色av片| 麻豆精品一区| 欲色天天网综合久久| 国产精彩视频在线| 久久爱www久久做| 久久精品ww人人做人人爽| 免费在线观看黄色网| 欧美视频在线观看免费网址| japan高清日本乱xxxxx| blacked蜜桃精品一区| 97国产精品久久| 国产视频一二三四区| 欧美激情综合在线| 国产中文字幕在线免费观看| 日韩第一区第二区| 中文字幕亚洲无线码a| 国产午夜性春猛交ⅹxxx| 国产一区二区三区在线看麻豆| 欧美大香线蕉线伊人久久国产精品| 影院在线观看全集免费观看| 欧美日韩一区二区三区在线| 最新中文字幕视频| 国产精品久久久久久久免费软件 | 91成人在线视频| 精品国产亚洲一区二区麻豆| 国产精品卡一卡二| 黄色一级大片在线观看| 欧美调教视频| 97免费视频在线播放| 亚洲大尺度视频| 亚洲欧美一区二区久久 | 久久午夜免费视频| 国产99一区视频免费 | 国产欧美大片| 国产精品三区在线| 激情图片在线观看高清国产| 91精品国产欧美一区二区| 一区二区三区在线播放视频| 日韩av一二三| 视频一区二区在线观看| 日韩成人亚洲| 中文字幕在线观看日韩| 中国a一片一级一片| 亚洲国产高清在线| 欧美伦理片在线观看| 日韩精品久久| 成人黄色av播放免费| 欧美性videos| 日韩一二在线观看| 国产网站在线看| 99国产一区二区三精品乱码| 欧美日韩黄色一级片| 亚洲调教一区| 国产精品旅馆在线| 国产一二区在线观看| 日韩三级视频中文字幕| 久久免费小视频| 97久久超碰精品国产| 国产又大又硬又粗| 波多野结衣在线播放一区| 国产精品普通话| 在线午夜影院| 亚洲激情视频在线| 精品人妻一区二区色欲产成人| 国产视频一区二区三区在线观看| av网站在线不卡| 午夜激情久久| 国产伦精品一区二区三区四区视频| 蜜桃视频在线观看免费视频| 在线播放国产精品| 99久久精品国产色欲| 午夜精品久久久久久久蜜桃app| 日韩精品电影一区二区| 久久99九九99精品| 女人帮男人橹视频播放| 天海翼亚洲一区二区三区| 国产激情综合五月久久| а√天堂在线官网| 精品一区电影国产| 一级黄色大片免费| 午夜亚洲国产au精品一区二区| 亚洲国产天堂av| 韩国一区二区三区| 女人和拘做爰正片视频| 欧美国产一区二区三区激情无套| 国产精品对白刺激久久久| 免费欧美电影| 欧美激情精品在线| 国产精品久久久久一区二区国产 | 四虎影视在线观看2413| 欧美三区免费完整视频在线观看| 久久久久久国产精品免费播放| 久久一二三国产| 女人扒开腿免费视频app| 美女黄色成人网| av一区二区三区免费观看| 欧美男gay| 国产精品果冻传媒潘| 国产精品亚洲成在人线| 国产91ⅴ在线精品免费观看| 麻豆网在线观看| 亚洲人成在线免费观看| 亚洲精品一区二区三区蜜桃| 欧美最新大片在线看| 日韩特黄一级片| 亚洲人成精品久久久久久| 小早川怜子久久精品中文字幕| 国产成人免费视频一区| 性猛交ⅹ×××乱大交| 午夜宅男久久久| 日韩精品综合在线| 亚洲一区二区三区无吗| 日韩欧美亚洲区| 亚洲免费毛片| 国产精品免费一区二区三区| 91麻豆精品一二三区在线| 国产精品自拍偷拍| 春暖花开亚洲一区二区三区| 午夜精品一区二区三区视频免费看 | 国产午夜精品久久久| 囯产精品久久久久久| 日韩网站在线看片你懂的| 一区二区视频网| 色先锋aa成人| 国产又粗又爽视频| 精品久久久久久| 国产视频91在线| 午夜精品久久久久久不卡8050| 久久久久久久久99| 亚洲最色的网站| 欧美高清视频一区二区三区| 亚洲欧美一区二区在线观看| 天天干天天舔天天操| 国产亚洲一区二区三区在线观看| 蜜桃传媒一区二区亚洲av| 91污片在线观看| 黄色a一级视频| 久久久精品黄色| 波多野结衣片子| 国产欧美一区视频| 一级黄色录像毛片| 亚洲国产精品成人综合色在线婷婷 | cao在线观看| 亚洲日本久久| 欧美精品一区免费| 久久久精品性| mm1313亚洲国产精品无码试看| 久久午夜av| 91n.com在线观看| 久久99精品久久久| 五月天婷婷影视| 国产乱淫av一区二区三区| 国产又粗又猛又爽又黄| 懂色中文一区二区在线播放| 久草免费资源站| 91视频在线观看免费| 亚洲人成人无码网www国产 | 黄色一级视频免费观看| 亚洲综合男人的天堂| 日本五十路女优| 一本在线高清不卡dvd| 亚洲av无码不卡| 9191成人精品久久| 肥臀熟女一区二区三区| 国产午夜精品理论片a级探花| 大片免费播放在线视频| 久久综合久久88| 岛国av在线网站| 国产精品久久久久7777婷婷| 中文字幕综合| 国产私拍一区| 欧美xxxxx视频| 国产成人永久免费视频| 免费看的黄色欧美网站| 天天综合天天添夜夜添狠狠添| 粉嫩av一区二区三区在线播放 | 亚洲精品第1页| 特一级黄色大片| 欧美日韩国产美| 亚洲 欧美 激情 小说 另类| 中文字幕成人在线| 成全电影大全在线观看| 国产精品久久久久久久美男| 国产精品777777在线播放| 农村寡妇一区二区三区| 91精品啪在线观看国产81旧版| 日韩在线一级片| 国产综合一区二区| 国产黄色网址在线观看| 亚洲精品伦理在线| 中文字幕 国产精品| 精品久久久久久久久久久院品网| 国产免费av在线| 欧美黑人xxxx| 亚洲狼人在线| 欧美国产一二三区| 欧美视频在线观看| 日本xxxx黄色| 久久综合色一综合色88| 69av视频在线| 欧美三级在线看| 天堂在线资源网| 米奇精品一区二区三区在线观看| 色香欲www7777综合网| 国产一区精品视频| 一区二区三区在线电影| 无码人妻丰满熟妇区五十路百度| 国产精品资源站在线| 美国一级黄色录像| 日韩欧美国产成人| 蜜臀av中文字幕| 超碰日本道色综合久久综合| 国产a亚洲精品| 欧美精品一区二区三区久久| 狠狠爱www人成狠狠爱综合网| 国产原创精品在线| 久久久久久久一区| 国产一区二区三区影院| 日韩精品最新网址| 免费在线视频欧美| 国产精品视频一区国模私拍| 九九在线精品| 国产99久久九九精品无码| 成人午夜av在线| 久久无码精品丰满人妻| 欧美一二三区在线观看| 欧洲日本在线| 成人av色在线观看| 久久精品国产www456c0m| 爆乳熟妇一区二区三区霸乳| 久久噜噜亚洲综合| 国产精品一区无码| 精品亚洲一区二区三区在线播放 | 精品久久久久久久久久久久久久| 亚洲精品国产suv一区| 欧美国产第二页| 亚洲精品一区二区三区中文字幕| 特级西西444| 高清国产一区二区三区| 久久久精品视频免费| 精品久久久久久久久久久院品网| 久草在线视频福利| 国产一区精品在线| 性感少妇一区| 亚洲a v网站| 在线看日本不卡| 在线日本视频| 91在线视频一区| 欧美欧美全黄| 中文视频在线观看| 欧美日韩在线免费观看| 欧美精品少妇| 91禁国产网站| 久久av免费看| 欧美成人乱码一二三四区免费| 国产精品初高中害羞小美女文| 国产乱码久久久| 久久久久久国产精品久久| 久久九九热re6这里有精品 | 国产精品一区二区黑丝| 久久av高潮av无码av喷吹| 欧美精品一区二区高清在线观看| 自拍网站在线观看| 亚洲国产精品日韩| 国产精品99久久久久久有的能看| 免费在线黄色片| 国产丝袜视频一区| 国产成人免费| 国产亚洲精品久久久久久久| 91在线观看污| 一区二区三区播放| 欧美激情亚洲激情| 欧美猛男同性videos| 天天色天天综合网| 欧美日韩国产在线看| 在线免费av网站| 国产91亚洲精品一区二区三区| 久久国产精品毛片| 久艹在线观看视频| 日韩成人中文字幕在线观看| 日韩欧美三区| 116极品美女午夜一级| 最新欧美精品一区二区三区| 天天操天天操天天操| 国产精品入口夜色视频大尺度 | 97久久国产精品| 视频在线不卡免费观看| 欧美激情 亚洲| 欧美日韩一区在线| 韩国精品一区| 91看片淫黄大片91| 国产日韩高清在线| 成人爽a毛片一区二区| 国产欧美精品在线|