精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本免费一区视频| 精品视频第一页| 中国色在线日|韩| 国产亚洲短视频| 亚洲aⅴ男人的天堂在线观看| 久久影院一区二区| 国产a久久精品一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 青青草国产免费| 超碰97在线免费观看| 国内成人免费视频| 97国产在线观看| 在线免费看视频| 国产伦精品一区二区三区在线播放 | 欧美久久久久久久久久久久久| 北条麻妃一二三区| 玖玖玖国产精品| 久久精品男人天堂| 国产精品无码午夜福利| 国产精品一区免费在线| 日本韩国精品一区二区在线观看| 国产在线无码精品| av福利在线播放| 2017欧美狠狠色| 91入口在线观看| 亚洲天堂狠狠干| 国产欧美丝祙| 欧美日韩不卡合集视频| 影音先锋男人看片资源| 免费国产自久久久久三四区久久| 日韩欧美一二区| 99国产精品久久久久久| 欧美成人精品三级网站| 亚洲综合精品自拍| 91免费网站视频| av福利精品| 久久精品日产第一区二区三区高清版 | 中文字字幕码一二三区| 日韩综合av| 91黄色免费版| 免费男同深夜夜行网站| 鲁鲁在线中文| 亚洲一区视频在线| 黑人巨茎大战欧美白妇| 国产精品一卡二卡三卡| 国产精品国产自产拍高清av王其 | 欧美精品少妇| 99久久精品99国产精品| 国产精品swag| 人人妻人人澡人人爽人人欧美一区 | 久久久av一区| 卡一卡二卡三在线观看| 欧美精品第一区| 精品亚洲永久免费精品| 最新在线黄色网址| 动漫视频在线一区| 亚洲国产精品久久| 欧美一级片黄色| 精品三级av| 亚洲精品久久久久久下一站| 超碰97在线资源站| 亚洲aaa级| 亚洲欧美日韩国产精品| 国产真人做爰视频免费| 日韩久久精品| 久久精品国产精品亚洲| 日本中文字幕免费在线观看| 欧美一区亚洲| 久久青草福利网站| 黄色大片网站在线观看| 羞羞视频在线观看欧美| 国产精品爱啪在线线免费观看| 这里只有精品国产| 国模大尺度一区二区三区| 97超级在线观看免费高清完整版电视剧| 亚洲欧美激情国产综合久久久| 国产成人在线视频网址| 国精产品99永久一区一区| 日夜干在线视频| 欧美激情一区二区三区不卡 | 99视频网站| 天堂在线观看av| 久久久精品欧美丰满| 亚洲成人18| 羞羞电影在线观看www| 天天免费综合色| 天天爽人人爽夜夜爽| 日韩欧美中文在线观看| 亚洲乱亚洲乱妇无码| 天堂av免费在线| 悠悠资源网久久精品| 日韩av片免费在线观看| 国产xxxxxx| 久久久久亚洲综合| 好吊色这里只有精品| 麻豆理论在线观看| 91精品国产乱| 亚洲av综合一区二区| 日韩综合精品| 午夜精品视频在线| 中文字幕在线观看视频一区| 成人三级伦理片| 亚欧洲精品在线视频免费观看| 欧美aaa免费| 在线观看视频一区二区欧美日韩| 91精品视频国产| 精品中文一区| 欧美精品videosex牲欧美| 亚洲av无码乱码国产精品fc2| 国产成人免费视频精品含羞草妖精| 久久久久久艹| 精品精品导航| 欧美精品1区2区3区| 亚洲av无码一区二区二三区| 欧美独立站高清久久| 97在线观看视频国产| 国产麻豆一精品一男同| 国产亚洲美州欧州综合国| 欧洲精品在线播放| 午夜精品久久久久久毛片| 亚洲人成电影网站| 国产无套内射又大又猛又粗又爽| 精品一区二区影视| 日韩伦理一区二区三区av在线| 成年人国产在线观看| 欧美一区二区三区在线| 嘿嘿视频在线观看| 久久久夜夜夜| 久久久精彩视频| heyzo在线欧美播放| 欧美一级精品大片| 日日操免费视频| 免费在线观看精品| 人禽交欧美网站免费| 午夜激情在线播放| 亚洲精品国产品国语在线| 久久久久久久中文字幕| 国产精品乡下勾搭老头1| 亚洲午夜激情| 精品自拍视频| 日韩在线国产精品| 伊人久久国产精品| 国产精品视频一二| 三级视频中文字幕| 色97色成人| 国产欧美久久久久久| jizz视频在线观看| 欧美系列在线观看| 99久久99久久精品免费看小说.| 日本va欧美va精品| 亚洲精品一区国产精品| 国产精品伦一区二区| 日韩在线不卡视频| 国产精品无码白浆高潮| 亚洲男帅同性gay1069| 中文av字幕在线观看| 午夜av一区| 91天堂在线观看| 成人在线观看免费网站| 日韩一区二区三区视频| 欧美色图一区二区| 成人高清免费观看| www.爱色av.com| 久久成人av| 成人黄色免费在线观看| 二区三区四区高清视频在线观看| 欧美一区日韩一区| 伊人365影院| 久久一夜天堂av一区二区三区| 熟妇人妻va精品中文字幕| 日韩欧美午夜| 99视频在线| 欧美成人免费电影| 久久精品视频在线| 日本xxxx人| 91福利国产成人精品照片| 日本爱爱小视频| 懂色av一区二区三区免费看| 免费黄色日本网站| 久久一本综合| 精品久久久久亚洲| 成人av色网站| 欧美激情视频一区二区| 黄色片在线免费看| 欧美一区二区黄色| 99久久精品国产亚洲| 国产精品不卡在线观看| 国产一线在线观看| 青青草精品视频| 国产一区二区三区在线免费| 久久91麻豆精品一区| 91色精品视频在线| 欧美momandson| 欧美精品一本久久男人的天堂| 桃花色综合影院| 777欧美精品| 91丝袜一区二区三区| 亚洲精品综合在线| www.自拍偷拍| 东方欧美亚洲色图在线| 久久精品影视大全| 亚洲狠狠婷婷| 中文有码久久| 久久99高清| 国产在线精品一区二区三区》 | 性欧美精品男男| 国产成人亚洲精品狼色在线 | 精品夜夜嗨av一区二区三区| 国产v片免费观看| 国产精品久久久久久久| 欧美日韩一区在线播放| 91蝌蚪精品视频| 国产日韩欧美黄色| 欧美大片1688| 97人人做人人爱| 91三级在线| 色av中文字幕一区| 黄色av免费在线看| 亚洲第一天堂av| 朝桐光av在线一区二区三区| 欧美色大人视频| 五月天婷婷导航| 五月激情丁香一区二区三区| 久久这里只有精品免费| **网站欧美大片在线观看| 精品人妻一区二区三区蜜桃视频| 成人h动漫精品一区二| 熟妇无码乱子成人精品| 久久精品99久久久| 日本男人操女人| 日韩经典一区二区| 久久久久久久激情| 国产亚洲精品久久久久婷婷瑜伽| www.日本三级| 一区在线免费| 日本福利视频一区| 国产精品黄色| 久久男人资源站| 欧美成人有码| 欧美视频在线第一页| 亚洲一区欧美| 国产精品视频一二三四区| 欧美精品首页| 久青草视频在线播放| 欧美激情亚洲| 国产精品视频网站在线观看| 国产一在线精品一区在线观看| 亚洲国产午夜伦理片大全在线观看网站 | 免费在线观看一级毛片| 精品视频在线播放| 黄色在线视频观看网站| 亚洲欧美综合v| 黄色网址在线播放| 丝袜亚洲另类欧美重口| 欧美69xxxx| 欧美精品在线免费播放| 人人超在线公开视频| 久久久伊人欧美| 日韩激情电影免费看| 日韩av电影在线网| 日韩综合av| 国产精品国产三级国产专区53| 136福利精品导航| 久久精品美女| 成人3d动漫在线观看| 亚洲资源在线网| 自拍欧美日韩| 黄页网站在线观看视频| 水蜜桃久久夜色精品一区的特点| 五月天亚洲视频| 国产成人精品免费视频网站| 亚洲天堂美女视频| 国产日韩精品久久久| 人人干在线观看| 亚洲国产va精品久久久不卡综合| 国产无人区码熟妇毛片多| 在线亚洲人成电影网站色www| 在线观看不卡的av| 欧美成人a∨高清免费观看| 日本v片在线免费观看| 深夜福利一区二区| ****av在线网毛片| 国产精品久久久久久av福利软件| 国产在线不卡一区二区三区| 国模一区二区三区私拍视频| 成人精品电影| 国产色一区二区三区| 日韩精品三区四区| 日本中文字幕精品| 久久精品欧美一区二区三区麻豆| 97成人资源站| 91福利资源站| 狠狠躁夜夜躁av无码中文幕| 国产一区二区三区在线| 日皮视频在线观看| 国产精品老女人精品视频| 亚洲天堂av资源在线观看| 亚洲精品成人久久久998| 亚洲黄页一区| 天天操精品视频| 久久久久国产免费免费| 欧美激情国产精品免费| 欧美性感一类影片在线播放| 蜜臀久久久久久999| 久久精品一区中文字幕| 我爱我色成人网| 国产精品香蕉视屏| 图片小说视频色综合| 日本xxxxxxx免费视频| 成人午夜视频在线观看| 992在线观看| 日韩欧美精品网址| 亚洲xxxx天美| 久久精品中文字幕| www.一区| 日韩电影大全在线观看| 国产精品久久久久9999高清| 青娱乐精品在线| 国产精品免费视频一区| 丁香社区五月天| 日韩av在线免费看| 国语对白在线刺激| 3d动漫啪啪精品一区二区免费| 日韩成人a**站| 无码内射中文字幕岛国片| 99国产精品一区| 国产在线一区视频| 日韩精品一区二区三区视频| 国产激情在线| 国产专区欧美专区| 成人精品影视| 三上悠亚在线一区二区| 国产欧美日韩麻豆91| 国产精品va无码一区二区三区| 亚洲成人a**站| 丁香花高清在线观看完整版| 成人久久18免费网站漫画| 天天操综合网| 国内自拍第二页| 亚洲欧美日韩国产手机在线| 一女二男一黄一片| 日日噜噜噜夜夜爽亚洲精品| 黑人一区二区三区| 亚州欧美一区三区三区在线| 青青草97国产精品免费观看| 国精产品一区一区| 欧美日韩国产首页| 好吊日视频在线观看| 91麻豆国产精品| 欧美日韩亚洲一区| 稀缺呦国内精品呦| 午夜欧美视频在线观看| 天堂√在线中文官网在线| 国产成人免费av电影| 欧美亚洲国产精品久久| 自拍偷拍21p| 亚洲欧美国产77777| 俄罗斯嫩小性bbwbbw| 性色av一区二区三区免费| 一道本一区二区三区| 亚洲77777| 亚洲影视资源网| 青青久在线视频| 国产精品成人久久久久| 久久五月天小说| 日韩欧美中文视频| 亚洲a一区二区| 国产小视频福利在线| 91精品久久久久久综合乱菊 | 浓精h攵女乱爱av| 亚洲狠狠丁香婷婷综合久久久| 国产综合视频在线| 青青草原成人在线视频| 欧美亚洲国产精品久久| 亚洲AV无码久久精品国产一区| 天涯成人国产亚洲精品一区av| 国产在线三区| 不卡一区二区三区视频| 久久精品亚洲| 校园春色 亚洲| 国产视频精品久久久| 久久99国产精品二区高清软件| 中文字幕一区二区三区有限公司 | 午夜剧场免费在线观看| 亚洲成人动漫在线播放| 天然素人一区二区视频| 神马午夜伦理影院| 久久久久久久久久久99999| 国产乱淫a∨片免费观看| 欧美性一区二区三区| 国产韩日影视精品| 日本japanese极品少妇| 欧美女孩性生活视频| 天天综合av| 潘金莲一级淫片aaaaa免费看| 91亚洲午夜精品久久久久久| 一级黄色大片免费观看| 91精品国产色综合久久不卡98口| 日韩精品一区二区三区免费观影 | 丰满少妇在线观看bd|