go grpc使用場景和使用示例

Go gRPC 使用場景

  • 微服務架構中的服務間通信:在微服務架構中,不同的服務之間需要高效、可靠地進行通信和數據交換,gRPC 可以很好地滿足這一需求。
  • 需要高并發、低延遲通信的場景:gRPC 基于 HTTP/2 協議,支持多路復用和頭部壓縮,能夠減少網絡延遲,提高通信效率,適用于對性能要求較高的場景。
  • 跨語言、跨平臺的系統整合:gRPC 使用 Protocol Buffers 作為接口定義語言,可以為多種編程語言生成對應的客戶端和服務端代碼,方便不同語言和平臺之間的系統進行集成。
  • 實時數據交互場景:如實時聊天系統、股票行情推送、物聯網設備數據采集等,gRPC 的雙向流式 RPC 模式能夠實現客戶端和服務端的實時雙向通信。
  • 大數據傳輸場景:對于需要傳輸大量數據的情況,如日志收集、文件傳輸等,gRPC 的服務端流式 RPC 和客戶端流式 RPC 模式可以分批次傳輸數據,提高傳輸效率。

Go gRPC 使用示例

以下是一個簡單的 Go gRPC 示例,包括服務端和客戶端的代碼:

1. 定義 .proto 文件
syntax = "proto3";package hello;service Greeter {rpc SayHello (HelloRequest) returns (HelloReply) {}
}message HelloRequest {string name = 1;
}message HelloReply {string message = 1;
}
2. 服務端代碼
package mainimport ("context""log""net"pb "github.com/your-repo/your-project/hello""google.golang.org/grpc"
)type server struct {pb.UnimplementedGreeterServer
}func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {log.Printf("Received: %v", in.GetName())return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}func main() {lis, err := net.Listen("tcp", ":50051")if err != nil {log.Fatalf("failed to listen: %v", err)}s := grpc.NewServer()pb.RegisterGreeterServer(s, &server{})log.Printf("server listening at %v", lis.Addr())if err := s.Serve(lis); err != nil {log.Fatalf("failed to serve: %v", err)}
}
3. 客戶端代碼
package mainimport ("context""log""time"pb "github.com/your-repo/your-project/hello""google.golang.org/grpc"
)func main() {conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure(), grpc.WithBlock())if err != nil {log.Fatalf("did not connect: %v", err)}defer conn.Close()c := pb.NewGreeterClient(conn)ctx, cancel := context.WithTimeout(context.Background(), time.Second)defer cancel()r, err := c.SayHello(ctx, &pb.HelloRequest{Name: "World"})if err != nil {log.Fatalf("could not greet: %v", err)}log.Printf("Greeting: %s", r.GetMessage())
}

示例說明

  1. 服務端
    • 定義了一個 Greeter 服務,其中包含一個 SayHello 方法。
    • 實現了 SayHello 方法的邏輯,接收客戶端發送的請求,并返回一條問候消息。
    • 使用 grpc.NewServer() 創建 gRPC 服務器,并通過 pb.RegisterGreeterServer() 注冊服務。
    • 服務器監聽指定端口,等待客戶端的連接和請求。
  2. 客戶端
    • 使用 grpc.Dial() 連接到服務端。
    • 創建 GreeterClient 實例,調用服務端的 SayHello 方法,并傳入請求參數。
    • 接收服務端返回的響應,并打印出來。

運行步驟

  1. 確保安裝了 Go 和 Protocol Buffer 編譯器 protoc
  2. .proto 文件放置在合適的位置,并使用 protoc 編譯生成 Go 代碼。
  3. 啟動服務端程序。
  4. 啟動客戶端程序,客戶端會向服務端發送請求,并接收響應。

通過這個示例,您可以快速了解如何在 Go 中使用 gRPC 創建服務端和客戶端,并實現簡單的 RPC 調用。

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

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

相關文章

6.8 學習ui組件方法和Element Plus介紹

學習 UI 組件庫的核心是 “文檔 實踐 深入”。從官方文檔入門,通過構建真實項目來鞏固和深化理解,適時探索源碼以提升認知。同時,掌握按需引入、主題定制、插槽等關鍵技術,并保持對性能、可訪問性和最佳實踐的關注。記住&#x…

MongoDB和Mysql比較

MongoDB與MySQL深度對比:選擇適合你的業務的數據存儲方案 在當今數據驅動的時代,選擇合適的數據庫系統對應用性能、開發效率和業務擴展性至關重要。作為數據庫領域的兩大巨頭,關系型數據庫的代表MySQL和文檔型NoSQL的代表MongoDB,常常成為開發者面臨的選擇。本文將從數據模…

LoRA modules_to_save解析及卸載適配器(62)

LoRA modules_to_save解析及卸載適配器 modules_to_save解析 PEFT 模型中卸載適配器 在需保存模塊列表中,還可以添加什么 modules_to_save解析 還有一個配置參數可用于指定你希望保持 “活躍且可訓練” 的層列表 —— 也就是說,這些層會被設為可訓練狀態。更便捷的是,你無需…

分支多、云也多,網絡又慢又燒錢?一套方案全搞定!

隨著企業云化和全球化步伐加快,多云、混合云已成為常態,而非選擇。隨之而來的是網絡架構的復雜性與日俱增:分支越來越多,應用越來越散,鏈路越來越雜。IT部門不僅要保障關鍵應用的體驗,還要應對跨境合規、成…

centos7安裝java mysql redis nginx

1.安裝java8(百度) yum install java-1.8.0-openjdk.x86_64 [rootcanteen jar]# yum install java-1.8.0-openjdk.x86_64 yum install java-1.8.0-openjdk-devel.x86_64 查java版本: [rootlocalhost ~]# java -version openjdk version "1.8.0_372" Op…

【STM32】G030單片機的窗口看門狗

一、簡單介紹窗口看門狗適合需要精確時序控制的場合,在一個受限的窗口期內喂狗,如果遞減計數器還沒有到窗口值就喂狗,會觸發復位如果一直不喂狗,也會觸發復位,和之前的獨立看門狗的窗口選項有點類似需要指出的是&#…

完整代碼注釋:實現 Qt 的 TCP 客戶端,實現和服務器通信

一、實驗效果演示 實現 Qt 的 TCP 客戶端&#xff0c;實現和服務器通信二、代碼框架 三、代碼 tcpclient客戶端代碼 tcpclient.cpp #include "tcpclient.h" #include "ui_tcpclient.h" #include <QDebug> #include <QMessageBox> #include …

AR培訓系統:油氣行業的安全與效率革新

在油氣行業&#xff0c;一場由增強現實&#xff08;AR www.teamhelper.cn &#xff09;技術引領的培訓革命正在悄然發生。新員工們不再需要冒著生命危險在真實的鉆井平臺上學習操作&#xff0c;而是通過AR眼鏡在虛擬環境中模擬鉆井、起下鉆甚至處理井噴等復雜操作。這種創新的培…

Linux 多線程:互斥與同步

Linux 多線程中的互斥與同步 —— pthread_mutex 與 semaphore在 Linux 多線程編程中&#xff0c;線程間共享全局變量或數據結構是常見場景。如果多個線程同時讀寫同一塊內存&#xff0c;就可能產生 數據競爭 和 不一致。為了解決這些問題&#xff0c;Linux 提供了多種 線程同步…

技術演進中的開發沉思-81 Linux系列:進程地址空間

上一個篇幅和大家聊了進程地址空間、內存描述符這些 Linux 內存管理的 “基本功”&#xff0c;我的一些學生問&#xff1a;“這些概念聽起來簡單&#xff0c;可實際開發中怎么用得上&#xff1f;” 我想今天把這些 “理論骨架” 填上 “實踐血肉”—— 畢竟我當年踩過的坑、摸過…

【聯通分量】題解:P13823 「Diligent-OI R2 C」所謂伊人_連通分量_最短路_01bfs_圖論_C++算法競賽

洛谷博客&#xff1a;https://www.luogu.com.cn/article/5n200x7y Link - P13823 討論區中有很多有用的 hack&#xff0c;沒過的話可以去看看。 每個點都可以換到其所在弱連通分量的最大點權&#xff0c;這是毋庸置疑的。 為了方便陳述&#xff0c;下文中記當前弱連通分量中…

區塊鏈+隱私計算護航“東數西算”數據安全報告

一、背景與政策支持1.1 "東數西算"工程概況戰略定位&#xff1a;作為數字經濟時代的核心"底座"&#xff0c;"東數西算"工程是國家級算力資源跨域調配戰略工程&#xff0c;旨在構建全國一體化算力網絡體系。啟動時間與布局&#xff1a;2022年2月&…

STM32——PWR

一、PWR1.1PWR簡介PWR&#xff08;Power Control&#xff09;電源控制PWR負責管理STM32內部的電源供電部分&#xff0c;可以實現可編程電壓監測器和低功耗模式的功能可編程電壓監測器&#xff08;PVD&#xff09;可以監控VDD電源電壓&#xff0c;當VDD下降到PVD閥值以下或上升到…

Linux系統網絡管理學習.2

目錄 一、學習目標與適用場景 二、網絡管理基礎概念 1. NetworkManager服務 2. 核心管理工具 三、NetworkManager服務管理&#xff08;基礎操作&#xff09; 1. 服務狀態控制 四、網絡參數配置&#xff08;IP/DNS/網關&#xff09; 1. 圖形化配置&#xff08;僅了解&…

響應式編程之Flow框架

文章目錄一、技術背景與產生原因1.1 響應式編程的興起1.2 響應式流規范&#xff08;Reactive Streams&#xff09;1.3 解決的問題1.4 響應式編程二、Flow API核心組件2.1 核心概念2.2 接口關系圖2.2 接口詳解2.3 背壓機制三、完整示例3.1 入門示例3.2 基礎發布-訂閱示例3.3 帶背…

ABeam中國 | 中國汽車市場(5)——軟件定義汽車(SDV)的智能化應用場景

前言本系列前四篇深入探討了中國新能源汽車市場的崛起與電動化進程中的挑戰。本文聚焦軟件定義汽車&#xff08;SDV&#xff09;的三大核心應用場景 ——高級駕駛輔助系統&#xff08;ADAS&#xff09;、智能駕駛艙人機界面&#xff08;HMI&#xff09;及出行即服務&#xff08…

BugKu Web滲透之成績查詢

打開網頁&#xff0c;頁面如下&#xff1a;輸入框中輸入不同的數字可以查詢不同的結果。輸入1后點擊submit按鈕&#xff0c;下方出現成績結果。從題目上看感覺是一個SQL注入的漏洞。思路有下&#xff1a;1.自己手動拼接一些常見的SQL注入。2.用bp抓包后用SQLMap去跑。首先&…

【MES】工業4.0智能制造數字化工廠(數字車間、MES、ERP)解決方案:智能工廠體系架構、系統集成以及智能設計、生產、管理、倉儲物流等

工業4.0智能制造數字化工廠的解決方案&#xff0c;涵蓋了智能制造的背景、企業實現智能工廠的好處、智能工廠的規劃與實現方法以及系統實施模塊的詳細介紹。通過上汽通用凱迪拉克工廠的案例展示了智能工廠的強大能力&#xff0c;強調了數據、技術、管理、人員等關鍵要素在智能制…

3.【鴻蒙應用開發實戰: 從入門到精通】開發入門 Hello World

1.【鴻蒙應用開發實戰: 從入門到精通】開發入門 Hello World1.1 前言1.2 創建一個新項目1.2.1 打開DevEco Studio1.2.2 點擊 Create Project 創建項目1.3 遺留問題1.4 總結與開發建議1.5 結束語1.1 前言 上篇博文【2.【鴻蒙應用開發實戰: 從入門到精通】開發環境搭建】我們已經…

mac系統本地部署Dify步驟梳理

更換終端&#xff0c;適配步驟梳理見筆記前提&#xff1a;已安裝docker desktop&#xff0c;若未安裝&#xff0c;跳轉至文末先安裝1.Git軟件準備&#xff08;1&#xff09;確認查詢Git版本&#xff08;2&#xff09;如果查詢不到系統會提示安裝&#xff0c;點擊安裝即可&#…