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

golang實現(xiàn)簡單rpc調(diào)用過程解析

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

基本概念

RPC(Remote Procedure Call)遠程過程調(diào)用,簡單的理解是一個節(jié)點請求另一個節(jié)點提供的服務,該協(xié)議允許運行于一臺計算機的程序調(diào)用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程,RPC最直接的作用就是微服務。

RPC通信過程

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

RPC 具體實現(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)
	/*將服務對象進行注冊*/
	err := rpc.Register(echoUtil)
	if err != nil {
		err.Error()
	}
	rpc.HandleHTTP()
   
   /* 固定端口進行監(jiān)聽*/
	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實現(xiàn)簡單rpc調(diào)用的文章就介紹到這了,更多相關(guān)golang rpc調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang error使用場景介紹

    Golang error使用場景介紹

    我們在使用Golang時,不可避免會遇到異常情況的處理,與Java、Python等語言不同的是,Go中并沒有try...catch...這樣的語句塊,這個時候我們?nèi)绾尾拍芨玫奶幚懋惓D兀勘疚膩斫棠阏_方法
    2023-03-03
  • go?install和go?get的區(qū)別實例詳解

    go?install和go?get的區(qū)別實例詳解

    go install是Golang用來編譯和安裝自定義package的工具,下面這篇文章主要給大家介紹了關(guān)于go?install和go?get區(qū)別的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Golang編程實現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少字符的方法

    Golang編程實現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少字符的方法

    這篇文章主要介紹了Golang編程實現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少字符的方法,涉及Go語言字符串遍歷與運算相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Go語言中切片(slice)和數(shù)組(array)的區(qū)別詳解

    Go語言中切片(slice)和數(shù)組(array)的區(qū)別詳解

    Go語言中切片(slice)和數(shù)組(array)是兩種不同的數(shù)據(jù)結(jié)構(gòu),它們在用法和行為上有一些重要區(qū)別,所以本文就通過一些代碼示例給大家詳細的介紹一下Go語言中切片(slice)和數(shù)組(array)的區(qū)別,需要的朋友可以參考下
    2023-09-09
  • go-spew調(diào)試利器詳解

    go-spew調(diào)試利器詳解

    這篇文章主要介紹了調(diào)試利器?go-spew,go-spew?可以以一種非常友好的方式輸出完整的數(shù)據(jù)結(jié)構(gòu)信息,go-spew?支持一些自定義配置,可以通過?spew.Config?修改,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 從基礎到高級全方位解析Go中反射的應用

    從基礎到高級全方位解析Go中反射的應用

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

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

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

    Golang分布式鎖詳細介紹

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

    詳解Golang中Requests包的使用

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

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

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

最新評論