快速了解Go+rpc

更多個人筆記:(僅供參考,非盈利)
gitee: https://gitee.com/harryhack/it_note
github: https://github.com/ZHLOVEYY/IT_note

文章目錄

    • rpc基礎概念
    • GO的rpc應用
      • 簡單編寫
      • json編寫rpc

rpc基礎概念

電商系統迅速發展后,有很多服務需要拆分,比如用戶服務,商品服務,支付服務,訂單服務,售后服務等 這些服務之間的相互調用就需要使用rpc

rpc框架:
在這里插入圖片描述

服務注冊中心:負責本地服務發布為遠程服務,管理提供給消費者
消費者:通過遠程代理對象調用遠程服務
服務提供者:提供接口和相關服務

rpc框架可以跨語言,協議私密,傳輸效率也很高

GO的rpc應用

官方的net/rpc包對于方法有定義要求符合:

func (t *T) MethodName (argType T1, replyType *T2) error

其中T,T1,T2需要被encoding/gob包序列化(就是說不同編碼器都需要適用)
第一個參數是調用者需要傳遞的參數
第二個是會以字符串方式返回的結果

簡單編寫

服務端: go run server.go運行就行

package mainimport ("fmt""net/http""net/rpc"
)type Args struct { //定義傳入參數結構X, Y int
}type Algorithm int //就是一個輔助的定義func (t *Algorithm) Sum(args *Args, reply *int) error { //定義方法*reply = args.X + args.Yfmt.Println("Exec Sum ", reply)return nil
}func main() {algorithm := new(Algorithm) //分配內存空間指針同時分配內存初始化為0值fmt.Println("algorithm start", algorithm)//注冊服務rpc.Register(algorithm)rpc.HandleHTTP() //將 RPC 服務掛載到 HTTP 服務器err := http.ListenAndServe(":8081", nil)if err != nil {fmt.Println("err=====", err.Error())}
}
  • 定義傳入的結構體參數
  • 為了調用方法,定義相關結構體承載
  • 實例化對應的承載結構體
  • 注冊服務,并注冊到HTTP上
  • 啟動端口監聽

客戶端: 終端開啟運行 go run xxx.go 1 2 (后面的1和2是制定的參數傳入)

package mainimport ("fmt""log""net/rpc""os""strconv"
)type Args struct { //定義傳入參數結構X, Y int
}type Algorithm int  //就是一個輔助的定義func (t *Algorithm) Sum(args *Args, reply *int) error {*reply = args.X + args.Yfmt.Println("Exec Sum ", reply)return nil
}func main() {//連接服務器client, err := rpc.DialHTTP("tcp", "127.0.0.1:8081")if err != nil {log.Fatal("dailHTTP發生錯誤", err)}//獲取第一個輸入i1, _ := strconv.Atoi(os.Args[1])//獲取第二個輸入i2, _ := strconv.Atoi(os.Args[2])args := Args{i1, i2}var reply int//調用遠程方法err = client.Call("Algorithm.Sum", args, &reply) //調用對應的方法if err!= nil {log.Fatal("調用遠程方法發生錯誤", err)}fmt.Printf("Arith: %d+%d=%d\n", args.X, args.Y, reply)
}
  • 連接對應的服務
  • 輸入,組成結構體
  • 通過Call 調用對應的方法并進行傳遞

json編寫rpc

  • 標準 RPC:主要用于 Go 程序之間通信,用Gob進行二進制編碼
  • JSON-RPC:適合跨語言通信(因為 JSON 是通用格式),用json進行編碼
    jsonrpc更加通用,,二者的實際使用其實就是啟動方式時函數調用上的區別,先不重復展開

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79095.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于大模型的膀胱腫瘤全周期診療方案研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、大模型預測膀胱腫瘤的原理與技術基礎 2.1 大模型介紹 2.2 預測原理 2.3 技術支撐 三、術前風險預測與準備方案 3.1 腫瘤分期與惡性程度預測 3.2 患者身體狀況評估 3.3 術前準備工作 …

2025年4月個人工作生活總結

本文為 2025年4月工作生活總結。 研發編碼 一個項目的臨時記錄 自2月份領導讓我牽頭負責一個項目起,在本月算是有較多時間投入——但也是與之前的相比。 月初,清明節前一晚上,因某事務被叫上參加臨時緊急遠程會議,幾方領導都在…

Python爬蟲實戰:獲取軟科網最新特定專業大學排名數據并做分析,為高考填報志愿做參考

一、引言 在高考升學的重要階段,志愿填報成為考生和家長關注的核心問題。準確、全面且具有權威性的大學專業排名數據,是考生做出科學志愿決策的關鍵依據。軟科網作為專業的大學排名信息發布平臺,其發布的計算機科學與技術專業排名數據,因具有較高的公信力和參考價值,備受…

自學S32k144(18)————芯片鎖死問題及成功解鎖流程

1.鎖死原因 溫度過高flash異常操作靜電等電壓異常問題。。。。 本人出現情況:之前開發板不知什么原因,發生短路,重新置換芯片后,發現芯片在S32DS中無法正常燒錄 判斷可能是由于焊接時溫度過高導致鎖死。需解鎖芯片。 2.解決方法…

ISIS的由于L1產生的一系列問題

如果有些名詞不清晰可以查看之前文章 L1訪問其他區域使用缺省路由會引發次優路徑問題,但次優路徑leak路由又會引發路由環路問題,下面將會從去缺省路由到路由環路一一解決 Level 1的缺省路由 L1訪問其他區域使用缺省路由 --> 引發次優路徑 --> 引…

C++繼承(下)

目錄 一、繼承與友元 二、繼承與靜態成員 三、菱形繼承及菱形虛擬繼承 1. 繼承的方式 2. 菱形繼承的問題 3. 菱形虛擬繼承 4. 虛擬繼承解決數據冗余和二義性的原理 4.1 普通菱形繼承的內存布局 4.2 虛擬繼承的內存布局 四、繼承的總結和反思 1. 多繼承的復雜性 2.…

【漫話機器學習系列】233.激活閾(Threshold Activation)

深度學習入門:了解“閾值激活函數”(Threshold Activation Function) 激活函數是神經網絡中至關重要的一環。今天,我們通過一幅簡單直觀的手繪圖,一起理解最早期也最基礎的激活函數之一 —— 閾值激活函數(…

(4)python中jupyter lab使用python虛擬環境

1. 先了解IPython和IPyKernel簡介 IPython 是一個功能強大的交互式 Python 解釋器和開發環境。它提供了一種增強的 Python Shell,使得用戶能夠以交互的方式探索、分析和可視化數據。IPython 的名稱來源于 "Interactive Python",體現了其交互式的特性。 IPyKernel 是…

nginx 配置要領

你提出的問題非常好!確實在配置 WebSocket 代理時,proxy_pass 的 URL 處理需要特別注意。以下是關鍵解釋和修正建議: 1. 原配置的問題分析 location /ws/ {proxy_pass http://fastapi-container:8000; # 會保留 /ws/ 前綴傳遞給后端 }這種配…

【AI】DeepSeek 流程圖 / 時序圖制作,Word 排版錯亂問題,文字轉直觀圖形

一:動態流程圖 / 時序圖制作(DeepSeek Draw.IO) 工具準備 DeepSeek(AI 生成代碼):官網(免費)Draw.IO(可視化渲染):官網(免費&#…

4. python3基本數據類型

Python3 中有六個標準的數據類型: Number(數字) String(字符串) List(列表) Tuple(元組) Set(集合) Dictionary(字典) Pyt…

WPF之TextBox控件詳解

文章目錄 1. TextBox概述2. 基本屬性與功能3. 輸入控制詳解3.1 MaxLength3.2 AcceptsReturn3.3 AcceptsTab3.4 CharacterCasing3.5 IsUndoEnabled3.6 自定義輸入限制 4. 文本選擇與操作4.1 選擇屬性4.2 選擇方法4.3 文本操作4.4 選擇事件4.5 實現自定義文本處理功能 5. 滾動支持…

1.4 點云數據獲取方式——結構光相機

圖1-4-1結構光相機 結構光相機作為獲取三維點云數據的關鍵設備,其工作原理基于主動式測量技術。通過投射已知圖案,如條紋、點陣、格雷碼等,至物體表面,這些圖案會因物體表面的高度變化而發生變形。與此同時,利用相機從特定

【MATLAB第118期】基于MATLAB的雙通道CNN多輸入單輸出分類預測方法

【MATLAB第118期】基于MATLAB的雙通道CNN多輸入單輸出分類預測方法 一、雙通道CNN簡介 在深度學習領域,卷積神經網絡(CNN)憑借其強大的特征提取能力,已成為圖像識別、自然語言處理等任務的核心技術。傳統單通道CNN在處理單一模態…

2025上海車展 | 移遠通信推出自研NG-eCall QuecOpen方案,助力汽車安全新標準加速落地

4月29日,在2025上海國際汽車工業展覽會期間,全球領先的物聯網和車聯網整體解決方案供應商移遠通信宣布,正式發布自主研發的NG-eCall(下一代緊急呼叫系統)QuecOpen解決方案。 該方案憑借高度集成的軟硬件協同設計&…

leetcode76

目錄 803ms超時。。。。越改越超時。。。 一些糾纏 代碼分析: 代碼問題: 改進建議: 示例代碼: The error message you’re seeing indicates that there is a reference binding to a null pointer in your code. This typ…

大數據應用開發和項目實戰-Seaborn

一、Seaborn概述 Seaborn是基于Python數據可視化庫Matplotlib開發的擴展庫,專注于統計圖形的繪制,旨在通過簡潔的代碼實現復雜數據的可視化,幫助用戶更輕松地呈現和理解數據。其核心設計目標是簡化統計可視化流程,提供高級接口和美…

數據科學與計算

Seaborn的介紹 Seaborn 是一個建立在 Matplotlib 基礎之上的 Python 數據可視化庫,專注于繪制各種統計圖形,以便更輕松地呈現和理解數據。 Seaborn 的設計目標是簡化統計數據可視化的過程,提供高級接口和美觀的默認主題,使得用戶…

深入淺出循環神經網絡(RNN):原理、應用與實戰

1、引言 在深度學習領域,循環神經網絡(Recurrent Neural Network, RNN)是一種專門用于處理**序列數據**的神經網絡架構。與傳統的前饋神經網絡不同,RNN 具有**記憶能力**,能夠捕捉數據中的時間依賴性,廣泛應…

廣州創科——湖北房縣汪家河水庫除險加固信息化工程

汪家河水庫 汪家河水庫位于湖北省房縣,建于1971年,其地利可謂是天公之作,東西二山蜿蜒起伏,山峰相連,峰峰比高,無有盡頭,東邊陡峭,西邊相對平坦,半山腰有一條鄉村道路&am…