欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用過(guò)程解析

 更新時(shí)間:2022年05月06日 11:22:35   作者:神技圈子  
這篇文章主要介紹了golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用,包括RPC具體實(shí)現(xiàn)結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

基本概念

RPC(Remote Procedure Call)遠(yuǎn)程過(guò)程調(diào)用,簡(jiǎn)單的理解是一個(gè)節(jié)點(diǎn)請(qǐng)求另一個(gè)節(jié)點(diǎn)提供的服務(wù),該協(xié)議允許運(yùn)行于一臺(tái)計(jì)算機(jī)的程序調(diào)用另一臺(tái)計(jì)算機(jī)的子程序,而程序員無(wú)需額外地為這個(gè)交互作用編程,RPC最直接的作用就是微服務(wù)。

RPC通信過(guò)程

RPC的通信過(guò)程網(wǎng)上介紹很多,這里就不在單獨(dú)介紹了,具體過(guò)程如下:
1.Client以本地調(diào)用的方式發(fā)起調(diào)用;
2.Client stub收到調(diào)用后負(fù)責(zé)將被調(diào)用的方法名、參數(shù)等打包編碼成特定格式成網(wǎng)絡(luò)傳輸?shù)南Ⅲw;
3.Client stub將消息體通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)端;
4.Server stub收到通過(guò)網(wǎng)絡(luò)接收到消息后按照相應(yīng)格式進(jìn)行拆包解碼,獲取方法名和參數(shù);
5.Server stub根據(jù)方法名和參數(shù)進(jìn)行本地調(diào)用;
6.被調(diào)用者(Server)本地調(diào)用執(zhí)行后將結(jié)果返回給Server stub;
7.Server stub將返回值打包編碼成消息;
8.通過(guò)網(wǎng)絡(luò)發(fā)送給Client;
9.Client stub收到消息后,進(jìn)行拆包解碼,返回給Client;
10.Client得到本次RPC調(diào)用的最終結(jié)果.

RPC 具體實(shí)現(xiàn)

server端

package main
import (
	"net"
	"net/http"
	"net/rpc"
	"strings"
)
type EchoUtil struct {
}
func (echo *EchoUtil) CountString(str string, rsp *int) error {
	*rsp = strings.Count(str, "s")
	return nil
}
func main() {
	echoUtil := new(EchoUtil)
	/*將服務(wù)對(duì)象進(jìn)行注冊(cè)*/
	err := rpc.Register(echoUtil)
	if err != nil {
		err.Error()
	}
	rpc.HandleHTTP()
   
   /* 固定端口進(jìn)行監(jiān)聽(tīng)*/
	listen, err := net.Listen("tcp", ":9999")
	if err != nil {
		panic(err.Error())
	}
	http.Serve(listen, nil)
}

客戶端

package main
import (
	"fmt"
	"net/rpc"
)
func main() {
	cli, err := rpc.DialHTTP("tcp", "localhost:9999")
	if err != nil {
		panic(err.Error())
	}
	var resp *int
	/*采用同步調(diào)用的方式*/
	err = cli.Call("EchoUtil.CountString", "this is test", &resp)
	if err != nil {
		panic(err.Error())
	}
	fmt.Println(*resp)
}

到此這篇關(guān)于golang實(shí)現(xiàn)簡(jiǎn)單rpc調(diào)用的文章就介紹到這了,更多相關(guān)golang rpc調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 從基礎(chǔ)到高級(jí)全方位解析Go中反射的應(yīng)用

    從基礎(chǔ)到高級(jí)全方位解析Go中反射的應(yīng)用

    本文我們將全面深入地探討Go語(yǔ)言的反射機(jī)制,從反射的基礎(chǔ)概念、為什么需要反射,到如何在Go中實(shí)現(xiàn)反射,以及在高級(jí)編程場(chǎng)景如泛型編程和插件架構(gòu)中的應(yīng)用,需要的可以參考下
    2023-10-10
  • golang defer執(zhí)行順序全面詳解

    golang defer執(zhí)行順序全面詳解

    這篇文章主要為大家介紹了golang defer執(zhí)行順序全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Golang分布式鎖詳細(xì)介紹

    Golang分布式鎖詳細(xì)介紹

    分布式鎖是控制分布式系統(tǒng)之間同步訪問(wèn)共享資源的一種方式。如果不同的系統(tǒng)或是同一個(gè)系統(tǒng)的不同主機(jī)之間共享了一個(gè)或一組資源,那么訪問(wèn)這些資源時(shí),需要通過(guò)一些互斥手段來(lái)防止彼此之間的干擾以保證一致性,在這種情況下,就需要使用分布式鎖了
    2022-10-10
  • 詳解Golang中Requests包的使用

    詳解Golang中Requests包的使用

    Go的net/http包雖然功能強(qiáng)大、用途也廣告,但要想正確的使用請(qǐng)求的客戶端是非常繁瑣的,所以本文和大家分享一個(gè)高效的HTTP的請(qǐng)求包c(diǎn)arlmjohnson/requests的使用,需要的小伙伴可以了解一下
    2023-06-06
  • go語(yǔ)言使用中提示%!(NOVERB)的解決方案

    go語(yǔ)言使用中提示%!(NOVERB)的解決方案

    o語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種簡(jiǎn)單易用的編程語(yǔ)言,同時(shí)保持高效性和可擴(kuò)展性,它支持垃圾回收機(jī)制,具有強(qiáng)大的并發(fā)編程能力,可以輕松處理大規(guī)模的并發(fā)任務(wù),Go語(yǔ)言還擁有豐富的標(biāo)準(zhǔn)庫(kù)和活躍的開(kāi)發(fā)社區(qū),使得開(kāi)發(fā)者能夠快速構(gòu)建出高質(zhì)量的應(yīng)用程序,需要的朋友可以參考下
    2023-10-10
  • 最新評(píng)論